Page History
...
| Code Block |
|---|
// Her vil STS'en verificere ID kortet.
IDCard idCard = stsRequest.getIDCard();
idCard.validateSignature();
idCard.validateSignatureAndTrust(signingVault);
// I dette eksempel verificeres følgende tre attributter:
Assert.assertEquals("1.0.1", idCard.getVersion());
Assert.assertEquals(AuthenticationLevel.VOCES_TRUSTED_SYSTEM, idCard.getAuthenticationLevel());
Assert.assertEquals("AltIdentifierStr", idCard.getAlternativeIdentifier()); |
STS Response
Her efter vil en STS bygge et response og først bygges et signeret DGWS ID kort:
| Code Block |
|---|
// Byg DGWS medarbejder ID kort (Niveau 4):
CareProvider careProvider = new CareProvider("medcom:cvrnumber", "20688092", "Lægehuset på bakken");
UserInfo userInfo = new UserInfo("2702681273", "Jens Sundbye", "Poulsen", "jens@email.dk", "overlæge", "7170", "004PT");
UserIDCard idcard = new UserIDCard(factory.createNewUserIDCard("Harmoni/EMS", userInfo, careProvider, new AuthenticationLevel(4), null, null, null, "AltIdentifierStr"), "Issuer"); |
Dette Identity Token kan nu indlejres i det samlede svar fra STS:
| Code Block |
|---|
// Signing vault
CredentialVault signingVault = new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Medarbejdercertifikat", "Kodeord til Medarbejdercertifikat");
// Opbyg samlet STS response
OIOBSTSAMLAssertionToIDCardResponseDOMBuilder responseBuilder = factory.createOIOBSTSAMLAssertionToIDCardResponseDOMBuilder();
responseBuilder.setAudienceRestriction("http://audience.nspoop.dk/dds");
responseBuilder.setIDCard(idcard);
responseBuilder.setSigningVault(signingVault);
responseBuilder.setContext("context");
responseBuilder.setRelatesTo("relatesTo");
Document consumerStsResponseDocument = responseBuilder.build(); |
Svaret kan sendes over netværket som XML:
| Code Block |
|---|
// Konverter til XML så det kan sendes over netværket
String consumerStsResponseXml = XmlUtil.node2String(consumerStsResponseDocument, false, false); |
Nu vil en anvender kunne modtage det omvekslede DGWS ID kort og hvordan man anvender Seal.Java til at behandle dette svar er beskrevet her: Seal.Java - Guide til anvendere (Consumer) - DGWS ID kort (system og bruger)
Komplet eksempel (incl. opbygning af request og modtagelse af response)
...
| Code Block | ||
|---|---|---|
| ||
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 testNewSecurityTokenServicetestBST2SOSI() { /** * Consumer sender request * */ // CredentialVault og Factory CredentialVault signingVault = new CredentialVaultTestUtil.getVoces3CredentialVault(ClasspathCredentialVault(null, "Filnavn på PKCS#12 Medarbejdercertifikat", "Kodeord til Medarbejdercertifikat"); SOSIFactoryCredentialVault factoryholderOfKeyVault = new SOSIFactory(signingVault, new java.util.Properties())ClasspathCredentialVault(null, "Filnavn på PKCS#12 Holder of key certifikat", "Kodeord til Holder of key certifikat"); OIOSAMLFactory factory = new OIOSAMLFactory(); //OIO3BSTSAMLAssertionBuilder SystemoiosamlAssertionBuilder ID kort= factory.createOIO3BSTSAMLAssertionBuilder(); CareProvider careProvider = new CareProvider(SubjectIdentifierTypeValues.CVR_NUMBER, "someID", "someOrgName"); oiosamlAssertionBuilder.setIssuer("https://oio3bst-issuer.dk"); oiosamlAssertionBuilder.setNameId("KorsbaekKommune\\MSK"); oiosamlAssertionBuilder.setAudience("http://audience.nspoop.dk/dds"); oiosamlAssertionBuilder.setNotOnOrAfter(notOnOrAfter); SystemIDCard systemIDCard = factoryoiosamlAssertionBuilder.createNewSystemIDCardsetCvr("SOSITEST", careProvider, AuthenticationLevel.VOCES_TRUSTED_SYSTEM, null, null, null, "AltIdentifierStr"); 20301823"); oiosamlAssertionBuilder.setOrganizationName("Korsbæk Kommune"); oiosamlAssertionBuilder.setHolderOfKeyCertificate(holderOfKey.getSystemCredentialPair().getCertificate()); // Byg STS requestoiosamlAssertionBuilder.setSigningVault(signingVault); OIOBSTSAMLAssertion oiosamlAssertion = oiosamlAssertionBuilder.build(); SecurityTokenRequestOIOBSTSAMLAssertionToIDCardRequestDOMBuilder consumerStsRequestrequestBuilder = factory.createNewSecurityTokenRequestcreateOIOBSTSAMLAssertionToIDCardRequestDOMBuilder(); requestBuilder.setAudience("http://audience.nspoop.dk/dds"); consumerStsRequest.setIDCard(systemIDCard); requestBuilder.setITSystemName("Korsbæk Kommunes IT systemer"); requestBuilder.setSubjectNameID("Mads_Skjern"); requestBuilder.setSigningVault(signingVault); // Endelig STS request requestBuilder.setOIOBSTSAMLAssertion(oiosamlAssertion); Document consumerStsRequestDocument = consumerStsRequestrequestBuilder.serialize2DOMDocumentbuild(); /** * Send request over netværk */ String consumerStsRequestXml = XmlUtil.node2String(consumerStsRequestDocument, false, false); consumerStsRequestDocument = XmlUtil.readXml(new java.util.Properties(), consumerStsRequestXml, false); /** * STS modtager request */ SecurityTokenRequestOIOBSTSAMLAssertionToIDCardRequest stsRequest = factory.deserializeSecurityTokenRequest(consumerStsRequestXmlcreateOIOBSTSAMLAssertionToIDCardRequestModelBuilder().build(consumerStsRequestDocument); // Her vil STS'en verificere ID kortet. I dette eksempel verificeres følgende tre attributter: IDCardOIOBSTSAMLAssertion idCardoiobstsamlAssertion = stsRequest.getIDCardgetOIOBSTSAMLAssertion(); Assert.assertEquals("1OIO-SAML-3.0.1", idCardoiobstsamlAssertion.getVersiongetSpecVersion()); Assert.assertEquals(AuthenticationLevel.VOCES_TRUSTED_SYSTEM"20301823", idCardoiobstsamlAssertion.getAuthenticationLevelgetCvrNumberIdentifier()); Assert.assertEquals("AltIdentifierStrhttp://audience.nspoop.dk/dds", idCardoiobstsamlAssertion.getAlternativeIdentifiergetAudienceRestriction()); /** * STS bygger response */ SecurityTokenResponse stsResponseUserIDCard uidc = createUserIDCard(signingVault); OIOBSTSAMLAssertionToIDCardResponseDOMBuilder responseBuilder = factory.createNewSecurityTokenResponse(stsRequest.createOIOBSTSAMLAssertionToIDCardResponseDOMBuilder(); responseBuilder.setAudienceRestriction("http://audience.nspoop.dk/dds"); stsResponseresponseBuilder.setIDCard(idCarduidc); responseBuilder.setSigningVault(signingVault); responseBuilder.setContext("context"); Document consumerStsResponseDocument = XmlUtilresponseBuilder.createEmptyDocumentsetRelatesTo("relatesTo"); Document consumerStsResponseDocument stsResponse= responseBuilder.serialize2DOMDocumentbuild(consumerStsResponseDocument); /** * Send response over netværk */ String consumerStsResponseXml = XmlUtil.node2String(consumerStsResponseDocument, false, false); consumerStsResponseDocument = XmlUtil.readXml(new java.util.Properties(), consumerStsResponseXml, false); /** * Consumer modtager response */ SecurityTokenResponseOIOBSTSAMLAssertionToIDCardResponse consumerStsResponse = factory.createOIOBSTSAMLAssertionToIDCardResponseModelBuilder().deserializeSecurityTokenResponsebuild(consumerStsResponseXmlconsumerStsResponseDocument); //IDCard VerifyidCardResponse ID card= consumerStsResponse.getIDCard(); IDCard idCardResponse = consumerStsResponse.getIDCard(); Assert.assertEquals("1.0.1", idCardResponse.getVersion()); Assert.assertEquals(AuthenticationLevel.MOCES_TRUSTED_USER, idCardResponse.getAuthenticationLevel()); if (!systemIDCard.isValidInTime()Assert.assertEquals("hans@dampf.dk", idCardResponse.getAlternativeIdentifier()); } private UserIDCard createUserIDCard(CredentialVault signingVault) { SOSIFactory factory = new SOSIFactory(signingVault, new throwjava.util.Properties()); CareProvider careProvider = new RuntimeException("Invalid DGWS Token"); 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 = Assertfactory.assertEquals("1.0.1", idCardResponse.getVersion()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 Assert.assertEquals(AuthenticationLevel.VOCES_TRUSTED_SYSTEM, idCardResponse.getAuthenticationLevel()static Date d(long milliSecondsFromNow) { Calendar now = Calendar.getInstance(); Assertnow.assertEquals("AltIdentifierStr", idCardResponse.getAlternativeIdentifier()set(Calendar.MILLISECOND, 0); return new Date(now.getTimeInMillis() + milliSecondsFromNow); } } |