diff options
| author | Thomas <> | 2021-03-10 12:25:10 +0100 | 
|---|---|---|
| committer | Thomas <> | 2021-03-10 12:25:10 +0100 | 
| commit | c5c6344931f67ccaba335ffa476b5e8117948020 (patch) | |
| tree | e8688e8c002450dd31d4bc89b0ebed60fe65d2ce /connector/src | |
| parent | ab4da3642f0ba96d74aff8e0a1a60e66fa0d4813 (diff) | |
| download | National_eIDAS_Gateway-c5c6344931f67ccaba335ffa476b5e8117948020.tar.gz National_eIDAS_Gateway-c5c6344931f67ccaba335ffa476b5e8117948020.tar.bz2 National_eIDAS_Gateway-c5c6344931f67ccaba335ffa476b5e8117948020.zip | |
switch to EAAF-components 1.1.13-SNAPSHOT to add EID-IDENTITY-STATUS-LEVEL attribute into SAML2 response
Diffstat (limited to 'connector/src')
8 files changed, 54 insertions, 12 deletions
| diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java index c41660ce..3a93c1b8 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java @@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;  import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.IRequest;  import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions; +import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues;  import at.gv.egiz.eaaf.core.api.idp.IAuthData;  import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;  import at.gv.egiz.eaaf.core.api.idp.auth.data.IAuthProcessDataContainer; @@ -37,8 +38,9 @@ import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.core.impl.data.Pair;  import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData; +import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData;  import at.gv.egiz.eaaf.core.impl.idp.auth.builder.AbstractAuthenticationDataBuilder; -import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper; +import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper;  import lombok.extern.slf4j.Slf4j;  @Service("AuthenticationDataBuilder") @@ -47,9 +49,9 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder    @Override    protected IAuthData buildDeprecatedAuthData(IRequest pendingReq) throws EaafException {         -    final IAuthProcessDataContainer authProcessData = -        pendingReq.getSessionData(AuthProcessDataWrapper.class);     -    AuthenticationData authData = new AuthenticationData(); +    final EidAuthProcessDataWrapper authProcessData = +        pendingReq.getSessionData(EidAuthProcessDataWrapper.class);     +    EidAuthenticationData authData = new EidAuthenticationData();      //set basis infos      super.generateDeprecatedBasicAuthData(authData, pendingReq, authProcessData); @@ -58,6 +60,9 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder      authData.setSsoSessionValidTo(          new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000)); +    authData.setEidStatus(authProcessData.isTestIdentity()  +        ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY); +          return authData;    } @@ -65,16 +70,21 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder    @Override    protected void buildServiceSpecificAuthenticationData(IAuthData authData, IRequest pendingReq)         throws EaafException { -    if (authData instanceof AuthenticationData) { -      ((AuthenticationData)authData).setGenericData( +    if (authData instanceof EidAuthenticationData) { +      ((EidAuthenticationData)authData).setGenericData(            ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME,             pendingReq.getUniquePiiTransactionIdentifier());        log.trace("Inject piiTransactionId: {} into AuthData", pendingReq.getUniquePiiTransactionIdentifier());        // set specific informations -      ((AuthenticationData)authData).setSsoSessionValidTo( +      ((EidAuthenticationData)authData).setSsoSessionValidTo(            new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000)); +      //set E-ID status-level +      final EidAuthProcessDataWrapper authProcessData = +          pendingReq.getSessionData(EidAuthProcessDataWrapper.class);         +      ((EidAuthenticationData)authData).setEidStatus(authProcessData.isTestIdentity()  +          ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY);      } else {        throw new RuntimeException("Can not inject PiiTransactionId because AuthData is of unknown type: "  @@ -86,7 +96,7 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder    @Override    protected IAuthData getAuthDataInstance(IRequest arg0) throws EaafException { -    return new AuthenticationData(); +    return new EidAuthenticationData();    } diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties index 9a4ae54f..2411fde3 100644 --- a/connector/src/main/resources/application.properties +++ b/connector/src/main/resources/application.properties @@ -48,6 +48,8 @@ eidas.ms.core.pendingrequestid.digist.algorithm=HmacSHA256  ## eIDAS Ref. Implementation connector ###  eidas.ms.auth.eIDAS.node_v2.entityId=ownSpecificConnector +eidas.ms.auth.eIDAS.eid.testidentity.default=false +  #eidas.ms.auth.eIDAS.node_v2.forward.endpoint=  eidas.ms.auth.eIDAS.node_v2.forward.method=POST  eidas.ms.auth.eIDAS.node_v2.countrycode=AT diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml index f6fdeefe..0f8511d5 100644 --- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml +++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml @@ -49,6 +49,9 @@      <property name="pvpIdpCredentials">        <ref bean="PVPEndPointCredentialProvider" />      </property> +    <property name="metadataProvider"> +      <ref bean="PVPMetadataProvider" /> +    </property>       </bean>    <bean id="AuthnRequestValidator" @@ -69,6 +72,9 @@      <property name="pvpIdpCredentials">        <ref bean="PVPEndPointCredentialProvider" />      </property> +    <property name="metadataProvider"> +      <ref bean="PVPMetadataProvider" /> +    </property>         </bean>    <bean id="eaafProtocolAuthenticationService" diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java index fcb0e73a..f50829c7 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java @@ -62,6 +62,7 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.EidasSignalServlet;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;  import at.gv.egiz.components.spring.api.SpringBootApplicationContextInitializer;  import at.gv.egiz.eaaf.core.api.data.EaafConstants; +import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.core.impl.idp.controller.ProtocolFinalizationController;  import at.gv.egiz.eaaf.core.impl.utils.DomUtils; @@ -99,7 +100,7 @@ import szrservices.SignContentResponseType;  @ActiveProfiles(profiles = {"JUNIT", "jUnitTestMode"})  public class FullStartUpAndProcessTest { -  private static final String FINAL_REDIRECT = "http://localhost/finalizeAuthProtocol?pendingid="; +  private static final String FINAL_REDIRECT = "http://localhost/public/secure/finalizeAuthProtocol?pendingid=";    @Autowired private WebApplicationContext wac;    @Autowired private PvpEndPointCredentialProvider credentialProvider; @@ -379,7 +380,7 @@ public class FullStartUpAndProcessTest {      Assert.assertEquals("SAML2 status", Constants.SUCCESS_URI, saml2.getStatus().getStatusCode().getValue());      final AssertionAttributeExtractor extractor = new AssertionAttributeExtractor(saml2); -    Assert.assertEquals("wrong resp attr. size", 6, extractor.getAllIncludeAttributeNames().size()); +    Assert.assertEquals("wrong resp attr. size", 7, extractor.getAllIncludeAttributeNames().size());      Assert.assertEquals("Wrong attr: LoA ", "http://eidas.europa.eu/LoA/high",           extractor.getSingleAttributeValue("urn:oid:1.2.40.0.10.2.1.1.261.108"));      Assert.assertEquals("Wrong attr: PVP_VERSION ", "2.2",  @@ -392,6 +393,8 @@ public class FullStartUpAndProcessTest {          extractor.getSingleAttributeValue("urn:eidgvat:attributes.authblock.signed"));      Assert.assertNotNull("Wrong attr: piiTras.Id ",           extractor.getSingleAttributeValue("urn:eidgvat:attributes.piiTransactionId")); +    Assert.assertEquals("Wrong attr:EID_STATUS_LEVEL ", "http://eid.gv.at/eID/status/identity", +        extractor.getSingleAttributeValue(PvpAttributeDefinitions.EID_IDENTITY_STATUS_LEVEL_NAME));    } diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java index d2c4aff2..5b612036 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java @@ -69,7 +69,7 @@ public class ProcessEngineSignalControllerTest {      Assert.assertEquals("http StatusCode", 302, httpResp.getStatus());      Assert.assertNotNull("redirect header", httpResp.getHeaderValue("Location"));      Assert.assertTrue("wrong redirect header",  -        httpResp.getHeader("Location").startsWith("http://localhost/errorHandling?errorid=")); +        httpResp.getHeader("Location").startsWith("http://localhost/public/secure/errorHandling?errorid="));    } diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java index 5f1c5dcf..0df8638c 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java @@ -11,6 +11,7 @@ import java.util.Map;  import javax.xml.transform.TransformerException;  import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomUtils;  import org.junit.Assert;  import org.junit.Before;  import org.junit.BeforeClass; @@ -35,6 +36,7 @@ import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;  import at.gv.egiz.eaaf.core.api.data.EaafConstants;  import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;  import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions; +import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues;  import at.gv.egiz.eaaf.core.api.idp.IAuthData;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink; @@ -42,8 +44,10 @@ import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;  import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;  import at.gv.egiz.eaaf.core.exceptions.EaafParserException;  import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; +import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData;  import at.gv.egiz.eaaf.core.impl.idp.auth.builder.BpkBuilder;  import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper; +import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper;  import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser;  import at.gv.egiz.eaaf.core.impl.idp.module.test.DummySpConfiguration;  import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; @@ -118,8 +122,10 @@ public class AuthenticationDataBuilderTest {    @Test    public void eidMode() throws EaafAuthenticationException {      // initialize state +    boolean isTestIdentity = RandomUtils.nextBoolean();      pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); - +    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity); +          // execute      IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); @@ -128,6 +134,9 @@ public class AuthenticationDataBuilderTest {      Assert.assertNotNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class));      Assert.assertNotNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class));      Assert.assertNotNull("LoA null", authData.getEidasQaaLevel()); +    Assert.assertEquals("testIdentity flag",  +        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,  +        ((EidAuthenticationData)authData).getEidStatus());      String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class);      String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class); @@ -159,6 +168,8 @@ public class AuthenticationDataBuilderTest {    @Test    public void moaIdMode() throws EaafAuthenticationException, EaafBuilderException {      //initialize state +    boolean isTestIdentity = RandomUtils.nextBoolean(); +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);          pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(false);      IIdentityLink idl = buildDummyIdl();      pendingReq.getSessionData(AuthProcessDataWrapper.class).setIdentityLink(idl); @@ -173,6 +184,9 @@ public class AuthenticationDataBuilderTest {      Assert.assertNull("piiTransactionId",           authData.getGenericData(ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, String.class)); +    Assert.assertEquals("testIdentity flag",  +        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,  +        ((EidAuthenticationData)authData).getEidStatus());      Assert.assertNotNull("assertion validTo", authData.getSsoSessionValidTo());      Assert.assertNotNull("LoA null", authData.getEidasQaaLevel()); diff --git a/connector/src/test/resources/data/metadata_valid_without_encryption.xml b/connector/src/test/resources/data/metadata_valid_without_encryption.xml index b224c336..32b24e91 100644 --- a/connector/src/test/resources/data/metadata_valid_without_encryption.xml +++ b/connector/src/test/resources/data/metadata_valid_without_encryption.xml @@ -71,6 +71,7 @@ ANsmjI2azWiTSFjb7Ou5fnCfbeiJUP0s66m8qS4rYl9L</ds:X509Certificate>        <md:RequestedAttribute FriendlyName="userAuthBlock" Name="urn:eidgvat:attributes.authblock.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>        <md:RequestedAttribute FriendlyName="eidBind" Name="urn:eidgvat:attributes.eidbind" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>        <md:RequestedAttribute FriendlyName="piiTransactionId" Name="urn:eidgvat:attributes.piiTransactionId" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/> +      <md:RequestedAttribute FriendlyName="EID-IDENTITY-STATUS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.109" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>      </md:AttributeConsumingService>    </md:SPSSODescriptor>    <md:Organization> diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml index ba385cb9..83acf445 100644 --- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml +++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml @@ -41,6 +41,9 @@      <property name="pvpIdpCredentials">        <ref bean="PVPEndPointCredentialProvider" />      </property> +    <property name="metadataProvider"> +      <ref bean="PVPMetadataProvider" /> +    </property>           </bean>    <bean id="AuthnRequestValidator" @@ -61,6 +64,9 @@      <property name="pvpIdpCredentials">        <ref bean="PVPEndPointCredentialProvider" />      </property> +    <property name="metadataProvider"> +      <ref bean="PVPMetadataProvider" /> +    </property>         </bean>    <bean id="eaafProtocolAuthenticationService" | 
