Page History
| Navitabs | ||||
|---|---|---|---|---|
| ||||
Indledning
Denne guide beskriver hvordan en STS skal omveksle et
Indledning
...
NSP OIO SAML Bootstrap Token
...
udstedt af et anvendersystem og returnere et NSP OIO IDWS
...
Identity Token der kan anvendes til at kalde en NSP service.
I det følgende vises nogle stykker kode der viser hvordan man som STS kan modtage et NSP OIO SAML Bootstrap Token og veksle det til en NSP OIO IDWS sikkerhedsbilleten STS kan lave denne omveksling.
Der findes et komplet eksempel (incl. hvordan anvender opbygger request og modtager response) sidst på siden der virker uden at det kræver tilretning.
Eksempel
STS Request
Beskrivelse af hvordan Seal.Java anvendes til at opbygge et STS request findes her: Bootstrap Token til OIO-Idws Token (Consumer - Request)
...
| Code Block |
|---|
// Her vil STS'en verificere det indkomne token. I dette eksempel verificeres følgende tre attributter:
OIOBSTSAMLAssertion oiobstsamlAssertion = stsRequest.getOIOBSTSAMLAssertion();
Assert.assertEquals("DK-SAML-2.0", oiobstsamlAssertion.getSpecVersion());
Assert.assertEquals("3", oiobstsamlAssertion.getAssuranceLevel());
Assert.assertEquals("http://fmk-online.dk", oiobstsamlAssertion.getAudienceRestriction()); |
STS Response
Her efter vil en STS bygge et response og først bygges bygge et signeret NSP OIO IDWS Identity Token:
| Code Block |
|---|
// Byg NSP OIO IDWS IdentityTokenIdentity Token CitizenIdentityTokenBuilder identityTokenBuilder = factory.createCitizenIdentityTokenBuilder(); identityTokenBuilder.setAudienceRestriction("http://fmk-online.dk"); identityTokenBuilder.setRecipientURL("https://fmk"); identityTokenBuilder.setIssuer("Issuer"); identityTokenBuilder.setNotBefore(notBefore); identityTokenBuilder.setNotOnOrAfter(notOnOrAfter); identityTokenBuilder.setDeliveryNotOnOrAfter(notOnOrAfter); identityTokenBuilder.setCprNumberAttribute("0101701234"); identityTokenBuilder.setSubjectNameID("SubjectNameID"); identityTokenBuilder.setSubjectNameIDFormat("SubjectNameIDFormat"); identityTokenBuilder.setHolderOfKeyCertificate(holderOfKeyVault.getSystemCredentialPair().getCertificate()); identityTokenBuilder.setSigningVault(signingVault); IdentityToken identityToken = identityTokenBuilder.build(); |
Dette NSP OIO IDWS Identity Token kan nu indlejres i det samlede svar fra STS:
...
Nu vil en anvender kunne modtage det omvekslede token og hvordan man anvender Seal.Java til dette er beskrevet her: Bootstrap Token til OIO-Idws Token (Consumer - Response)
Komplet eksempel (incl. opbygning af request og modtagelse af response)
| Code Block | ||
|---|---|---|
| ||
public class TestFactoryFlow extends AbstractUserIDCardTest { @Test public void testBst2Idws() { /** * Consumer sender request */ // CredentialVault og Factory CredentialVault signingVault = CredentialVault signingVault = CredentialVaultTestUtil.getVoces3CredentialVault(new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Medarbejdercertifikat", "Kodeord til Medarbejdercertifikat"); CredentialVault holderOfKeyVault = CredentialVaultTestUtil.getVocesHolderOfKeyCredentialVault(); new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Holder of key certifikat", "Kodeord til Holder of key certifikat"); OIOSAMLFactory factory = new OIOSAMLFactory(); // Byg OIOBSTSAMLAssertion OIO3BSTCitizenSAMLAssertionBuilder oio3bstCitizenSAMLAssertionBuilder = factory.createOIO3BSTCitizenSAMLAssertionBuilder(); oio3bstCitizenSAMLAssertionBuilder.setAudience("http://fmk-online.dk"); oio3bstCitizenSAMLAssertionBuilder.setIssuer("Issuer"); oio3bstCitizenSAMLAssertionBuilder.setNameId("NameId"); oio3bstCitizenSAMLAssertionBuilder.setAssuranceLevel(AssuranceLevel.NSIS.Substantial); oio3bstCitizenSAMLAssertionBuilder.setCpr("0101701234"); oio3bstCitizenSAMLAssertionBuilder.setNotOnOrAfter(notOnOrAfter); oio3bstCitizenSAMLAssertionBuilder.setSigningVault(signingVault); oio3bstCitizenSAMLAssertionBuilder.setHolderOfKeyCertificate(holderOfKeyVault.getSystemCredentialPair().getCertificate()); OIOBSTSAMLAssertion oiobstsamlAssertion = oio3bstCitizenSAMLAssertionBuilder.build(); // Byg STS request OIOBootstrapToIdentityTokenRequestDOMBuilder requestDomBuilder = factory.createOIOBootstrapToIdentityTokenRequestDOMBuilder(); requestDomBuilder.setOIOBootstrapToken(oiobstsamlAssertion); requestDomBuilder.setAudience("http://fmk-online.dk"); requestDomBuilder.setCPRNumberClaim("0101701234"); requestDomBuilder.setSigningVault(signingVault); Document consumerStsRequestDocument = requestDomBuilder.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 */ OIOBootstrapToIdentityTokenRequest stsRequest = factory.createOIOBootstrapToIdentityTokenRequestModelBuilder().build(consumerStsRequestDocument); // Her vil STS'en verificere ID kortet. I dette eksempel verificeres følgende tre attributter: oiobstsamlAssertion = stsRequest.getOIOBSTSAMLAssertion(); Assert.assertEquals("OIO-SAML-3.0", oiobstsamlAssertion.getSpecVersion()); Assert.assertEquals("Substantial", oiobstsamlAssertion.getAssuranceLevel()); Assert.assertEquals("http://fmk-online.dk", oiobstsamlAssertion.getAudienceRestriction()); /** * STS bygger response */ // Byg IdentityToken CitizenIdentityTokenBuilder identityTokenBuilder = factory.createCitizenIdentityTokenBuilder(); identityTokenBuilder.setAudienceRestriction("http://fmk-online.dk"); identityTokenBuilder.setRecipientURL("https://fmk"); identityTokenBuilder.setIssuer("Issuer"); identityTokenBuilder.setNotBefore(notBefore); identityTokenBuilder.setNotOnOrAfter(notOnOrAfter); identityTokenBuilder.setDeliveryNotOnOrAfter(notOnOrAfter); identityTokenBuilder.setCprNumberAttribute("0101701234"); identityTokenBuilder.setSubjectNameID("SubjectNameID"); identityTokenBuilder.setSubjectNameIDFormat("SubjectNameIDFormat"); identityTokenBuilder.setHolderOfKeyCertificate(holderOfKeyVault.getSystemCredentialPair().getCertificate()); identityTokenBuilder.setSigningVault(signingVault); IdentityToken identityToken = identityTokenBuilder.build(); // Byg STS response AbstractOIOToIdentityTokenResponseDOMBuilder<?> responseBuilder = factory.createOIOBootstrapToIdentityTokenResponseDOMBuilder(); responseBuilder.setIdentityToken(identityToken); responseBuilder.setSigningVault(signingVault); responseBuilder.setRelatesTo("relatesTo"); responseBuilder.setContext("context"); Document consumerStsResponseDocument = responseBuilder.build(); /** * Send response over netværk */ String consumerStsResponseXml = XmlUtil.node2String(consumerStsResponseDocument, false, false); consumerStsResponseDocument = XmlUtil.readXml(new Properties(), consumerStsResponseXml, false); /** * Consumer modtager response */ OIOBootstrapToIdentityTokenResponse consumerStsResponse = factory.createOIOBootstrapToIdentityTokenResponseModelBuilder().build(consumerStsResponseDocument); IdentityToken identityTokenResponse = consumerStsResponse.getIdentityToken(); Assert.assertEquals("DK-SAML-2.0", identityTokenResponse.getSpecVersion()); Assert.assertEquals("3", identityTokenResponse.getAssuranceLevel()); Assert.assertEquals("http://fmk-online.dk", identityTokenResponse.getAudienceRestriction()); } } |
...