Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

 Læs OIO SAML Assertion fra IdP

En NSP OIO SAML Assertion der stammer fra en Identity Provider kan Seal.Java parse til et OIOBSTSAMLAssertion objekt på følgende måde:

...

Code Block
collapsetrue
public class TestFactoryFlow {

    private static final String EXPECTED_AUTHORIZATIONCODE = "004PT";
    private static final String EXPECTED_CPR = "2702681273";
    private static final String EXPECTED_CVR = "20688092";
    private static final String EXPECTED_EMAIL = "jens@email.dk";
    private static final String EXPECTED_GIVENNAME = "Jens Sundbye";
    private static final String EXPECTED_ITSYSTEMNAME = "Harmoni/EMS";
    private static final String EXPECTED_OCCUPATION = "overlæge";
    private static final String EXPECTED_ORGANIZATION = "Lægehuset på bakken";
    private static final String EXPECTED_SURNAME = "Poulsen";
    private static final String EXPECTED_USEREDUCATIONCODE = "7170";

    private static final Date notOnOrAfter = d(10);

    @Test
    public void testBST2SOSI() {

        /**
         * Consumer sender request
         */

        // CredentialVault og Factory
        CredentialVault signingVault = CredentialVaultTestUtil.getMoces3CredentialVault();
        CredentialVault holderOfKey = CredentialVaultTestUtil.getVocesHolderOfKeyCredentialVault();
        OIOSAMLFactory factory = new OIOSAMLFactory();

        OIO3BSTSAMLAssertionBuilder oiosamlAssertionBuilder = factory.createOIO3BSTSAMLAssertionBuilder();
        oiosamlAssertionBuilder.setIssuer("https://oio3bst-issuer.dk");
        oiosamlAssertionBuilder.setNameId("KorsbaekKommune\\MSK");
        oiosamlAssertionBuilder.setAudience("http://fmk-online.dk");
        oiosamlAssertionBuilder.setNotOnOrAfter(notOnOrAfter);
        oiosamlAssertionBuilder.setCvr("20301823");
        oiosamlAssertionBuilder.setOrganizationName("Korsbæk Kommune");
        oiosamlAssertionBuilder.setHolderOfKeyCertificate(holderOfKey.getSystemCredentialPair().getCertificate());
        oiosamlAssertionBuilder.setSigningVault(signingVault);
        OIOBSTSAMLAssertion oiosamlAssertion = oiosamlAssertionBuilder.build();

        OIOBSTSAMLAssertionToIDCardRequestDOMBuilder requestBuilder = factory.createOIOBSTSAMLAssertionToIDCardRequestDOMBuilder();
        requestBuilder.setAudience("http://fmk-online.dk");
        requestBuilder.setITSystemName("Korsbæk Kommunes IT systemer");
        requestBuilder.setSubjectNameID("Mads_Skjern");
        requestBuilder.setSigningVault(signingVault);
        requestBuilder.setOIOBSTSAMLAssertion(oiosamlAssertion);

        Document consumerStsRequestDocument = requestBuilder.build();

        /**
         * Send request over netværk
         */
        String consumerStsRequestXml = XmlUtil.node2String(consumerStsRequestDocument, false, false);
        consumerStsRequestDocument = XmlUtil.readXml(new java.util.Properties(), consumerStsRequestXml, false);

        /**
         *  STS modtager request
         */
        OIOBSTSAMLAssertionToIDCardRequest stsRequest = factory.createOIOBSTSAMLAssertionToIDCardRequestModelBuilder().build(consumerStsRequestDocument);

        // Her vil STS'en verificere ID kortet. I dette eksempel verificeres følgende tre attributter:
        OIOBSTSAMLAssertion oiobstsamlAssertion = stsRequest.getOIOBSTSAMLAssertion();
        Assert.assertEquals("OIO-SAML-3.0", oiobstsamlAssertion.getSpecVersion());
        Assert.assertEquals("20301823", oiobstsamlAssertion.getCvrNumberIdentifier());
        Assert.assertEquals("http://fmk-online.dk", oiobstsamlAssertion.getAudienceRestriction());

        /**
         *  STS bygger response
         */
        UserIDCard uidc = createUserIDCard(signingVault);

        OIOBSTSAMLAssertionToIDCardResponseDOMBuilder responseBuilder = factory.createOIOBSTSAMLAssertionToIDCardResponseDOMBuilder();
        responseBuilder.setAudienceRestriction("http://fmk-online.dk");
        responseBuilder.setIDCard(uidc);
        responseBuilder.setSigningVault(signingVault);
        responseBuilder.setContext("context");
        responseBuilder.setRelatesTo("relatesTo");

        Document consumerStsResponseDocument = responseBuilder.build();

        /**
         *  Send response over netværk
         */
        String consumerStsResponseXml = XmlUtil.node2String(consumerStsResponseDocument, false, false);
        consumerStsResponseDocument = XmlUtil.readXml(new java.util.Properties(), consumerStsResponseXml, false);

        /**
         *  Consumer modtager response
         */
        OIOBSTSAMLAssertionToIDCardResponse consumerStsResponse = factory.createOIOBSTSAMLAssertionToIDCardResponseModelBuilder().build(consumerStsResponseDocument);

        IDCard idCardResponse = consumerStsResponse.getIDCard();
        Assert.assertEquals("1.0.1", idCardResponse.getVersion());
        Assert.assertEquals(AuthenticationLevel.MOCES_TRUSTED_USER, idCardResponse.getAuthenticationLevel());
        Assert.assertEquals("hans@dampf.dk", idCardResponse.getAlternativeIdentifier());
    }

    private UserIDCard createUserIDCard(CredentialVault signingVault) {
        SOSIFactory factory = new SOSIFactory(signingVault, new java.util.Properties());

        CareProvider careProvider = new CareProvider(NameSpaces.NS_MEDCOM + ":cvrnumber", EXPECTED_CVR, EXPECTED_ORGANIZATION);
        UserInfo userInfo = new UserInfo(EXPECTED_CPR, EXPECTED_GIVENNAME, EXPECTED_SURNAME, EXPECTED_EMAIL, EXPECTED_OCCUPATION, EXPECTED_USEREDUCATIONCODE, EXPECTED_AUTHORIZATIONCODE);
        UserIDCard idcard = factory.createNewUserIDCard(EXPECTED_ITSYSTEMNAME, userInfo, careProvider, AuthenticationLevel.MOCES_TRUSTED_USER, null, null, null, "hans@dampf.dk");
        return new UserIDCard(idcard, "newIssuer");
    }

    private static Date d(int minutesFromNow) {
        long l = minutesFromNow * 60L * 1000L;
        return d(l);
    }

    private static Date d(long milliSecondsFromNow) {
        Calendar now = Calendar.getInstance();
        now.set(Calendar.MILLISECOND, 0);

        return new Date(now.getTimeInMillis() + milliSecondsFromNow);
    }
}

...