Versions Compared

Key

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

...

Code Block
// CredentialVault og Factory
CredentialVault signingVault = CredentialVaultTestUtil.getVoces3CredentialVault(new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Medarbejdercertifikat", "Kodeord til Medarbejdercertifikat");
CredentialVault holderOfKeyholderOfKeyVault = new CredentialVaultTestUtil.getVocesHolderOfKeyCredentialVault(ClasspathCredentialVault(null, "Filnavn på PKCS#12 Holder of key certifikat", "Kodeord til Holder of key certifikat");
OIOSAMLFactory factory = new OIOSAMLFactory();

...

Her efter vil en STS bygge et response og først bygges et signeret DGWS ID kort. I det samlede eksempel til sidst er opbygning af ID kort samlet i metoden createUserIDCard():

Code Block
// CredentialVaultByg ogDGWS Factory
CredentialVaultmedarbejder signingVaultID =kort CredentialVaultTestUtil.getVoces3CredentialVault();
SOSIFactory factory = new SOSIFactory(signingVault, new java.util.Properties());

// Byg DGWS ID kort
(Niveau 4):
CareProvider careProvider = new CareProvider(careProviderType"medcom:cvrnumber", EXPECTED_CVR, EXPECTED_ORGANIZATION);"20688092", "Lægehuset på bakken");

UserInfo userInfo = new UserInfo(EXPECTED_CPR, EXPECTED_GIVENNAME, EXPECTED_SURNAME, EXPECTED_EMAIL, EXPECTED_OCCUPATION, EXPECTED_USEREDUCATIONCODE, EXPECTED_AUTHORIZATIONCODE);"2702681273", "Jens Sundbye", "Poulsen", "jens@email.dk", "overlæge", "7170", "004PT");

UserIDCard idcard = new sosiFactoryUserIDCard(factory.createNewUserIDCard(EXPECTED_ITSYSTEMNAME, userInfo, careProvider, AuthenticationLevel.MOCES_TRUSTED_USER, null, null, null, "hans@dampf.dkAltIdentifierStr");
UserIDCard uidc = new UserIDCard(idcard, "newIssuerIssuer");

Dette Identity Token kan nu indlejres i det samlede svar fra STS:

Code Block
OIOBSTSAMLAssertionToIDCardResponseDOMBuilder responseBuilder = factory.createOIOBSTSAMLAssertionToIDCardResponseDOMBuilder();
responseBuilder.setAudienceRestriction("http://fmk-onlineaudience.nspoop.dk/dds");
responseBuilder.setIDCard(uidcidcard);
responseBuilder.setSigningVault(signingVault);
responseBuilder.setContext("context");
responseBuilder.setRelatesTo("relatesTo");

Document consumerStsResponseDocument = responseBuilder.build();

...

Code Block
collapsetrue
public class TestFactoryFlow extends AbstractUserIDCardTest { {

    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.getVoces3CredentialVault(new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Medarbejdercertifikat", "Kodeord til Medarbejdercertifikat");
        CredentialVault holderOfKeyholderOfKeyVault = CredentialVaultTestUtil.getVocesHolderOfKeyCredentialVault(new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Holder of key certifikat", "Kodeord til Holder of key certifikat");
        OIOSAMLFactory factory = new OIOSAMLFactory();

        OIO3BSTSAMLAssertionBuilder oiosamlAssertionBuilder = factory.createOIO3BSTSAMLAssertionBuilder();
        oiosamlAssertionBuilder.setIssuer("https://oio3bst-issuer.dk");
        oiosamlAssertionBuilder.setNameId("KorsbaekKommune\\MSK");
        oiosamlAssertionBuilder.setAudience("http://fmk-onlineaudience.nspoop.dk/dds");
        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-onlineaudience.nspoop.dk/dds");
        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-onlineaudience.nspoop.dk/dds", oiobstsamlAssertion.getAudienceRestriction());

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

        OIOBSTSAMLAssertionToIDCardResponseDOMBuilder responseBuilder = factory.createOIOBSTSAMLAssertionToIDCardResponseDOMBuilder();
        responseBuilder.setAudienceRestriction("http://fmk-onlineaudience.nspoop.dk/dds");
        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);
    }
}