Page History
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
/* Server will setup OIOIDWSFactory */
final Federation federation = new SOSITestFederation(SignatureUtil.setupCryptoProviderForJVM());
final CredentialVault serverTestVault = CredentialVaultTestUtil.getCredentialVaultFromResource(System.getProperties(), "fmk_idws_test.p12");
final OIOIDWSFactory oioidwsFactory = new OIOIDWSFactory(federation, serverTestVault);
// ****************** HANDLING INPUT ******************
// Server side input/request document
SOAPPart soapPart = soapRequestMessage.getSOAPPart();
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
SOAPBody soapBody = soapRequestMessage.getSOAPBody();
SOAPHeader soapHeader = soapRequestMessage.getSOAPHeader();
/*Parse request document into IDWS request*/
/*Validation is done in parsing. So if any error - no request object is created*/
LibertyRequest request = oioidwsFactory.createRequest(soapEnvelope);
/*Work on request*/
String messageID = request.getMessageID();
assertNotNull(messageID); // Client did not set MessageID - but in cannot be null
String to = request.getTo();
assertEquals("https://myApp", to);
/*Work with CitizenIdentityToken*/
CitizenIdentityToken identityToken = request.getIdentityToken();
assertNotNull(identityToken); // Must be there!
String cpr = identityToken.getCpr();
assertEquals("2512484916", cpr);
BasicPrivileges basicPriviliges = identityToken.getPrivileges();
assertNotNull(basicPriviliges);
/*Work with priviliges*/
Set<String> scopes = basicPriviliges.getScopes();
for (String scope : scopes) {
List<String> privileges = basicPriviliges.getPrivileges(scope);
assertEquals("urn:dk:healthcare:saml:actThroughProcurationBy:cprNumberIdentifier:1111111118", scope);
assertEquals("urn:dk:healthcare:fmk:read", privileges.get(0));
assertEquals("urn:dk:healthcare:fmk:write", privileges.get(1));
}
List<String> privilegeList = basicPriviliges.getPrivileges("urn:dk:healthcare:saml:actThroughProcurationBy:cprNumberIdentifier:1111111118");
assertNotNull(privilegeList);
assertEquals(2, privilegeList.size());
/*Work in my app*/
Tag myAppTag = TagUtil.create("http://demo.dk/custom", "myApp","App");
Element myApp = TagUtil.getFirstChildElementNS(soapBody, myAppTag);
String myAppRequestAsString = XmlUtil.node2String(myApp, false, false);
assertEquals("<myApp:App xmlns:myApp=\"http://demo.dk/custom\"><myApp:Field_1>value1</myApp:Field_1><myApp:Field_2 custom_attribute_2=\"value2\"/></myApp:App>", myAppRequestAsString);
Tag myAppHeaderTag = TagUtil.create("http://demo.dk/custom", "myApp","Header");
Element myHeader = TagUtil.getFirstChildElementNS(soapHeader, myAppHeaderTag);
String myAppRequestHeaderAsString = XmlUtil.node2String(myHeader, false, false);
assertEquals("<myApp:Header xmlns:myApp=\"http://demo.dk/custom\">my_app_header</myApp:Header>", myAppRequestHeaderAsString);
// ****************** CREATING OUTPUT ******************
Document outputDocument = XmlUtil.readXml(System.getProperties(), MY_SOAP_APP_REPONSE, false);
/*Sign repsonse with test vault*/
LibertyMessageDOMEnhancer enhancer = oioidwsFactory.createResponseDomEnhancer(outputDocument, true);
enhancer.setWSAddressingAction("myApp.response"); //Required
//enhancer.setWSAddressingMessageID(); //Required - one will be made if not set be server
enhancer.setWSAddressingRelatesTo(request.getTo()); //Required - Validation will fail if not set
//enhancer.setWSAddressingTo("client"); //Optional
enhancer.enhanceAndSign(); // Enhance and sign output document into IDWS valid reponse
/*create response message*/
MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
soapResponseMessage = messageFactory.createMessage(null, new ByteArrayInputStream(XmlUtil.node2String(outputDocument).getBytes()));
//return responseSoapMessage
//System.out.println(XmlUtil.node2String(responseSoapMessage.getSOAPPart().getEnvelope(), true, false));
|
Federations
Når SOSIFactory er oprettet, er det let at komme i gang. Overvej følgende kodestykker, der indeholder kode til opbygning af en anmodning (request) som sendes til en tjenesteudbyder (Service provider).
Service Consumer
| Code Block | ||||
|---|---|---|---|---|
| ||||
Properties properties = ...;
SOSITestFederation testFederation = new SOSITestFederation(properties);
CredentialVault credentialVault = ...; // construct or resolve credentialvault here
SOSIFactory factory = new SOSIFactory(testFederation, credentialVault, properties);
Request request = factory.createNewRequest(
false, // don’t require non-repudiation receipt
null // Optional flow-ID (not used here)
);
IDCard idCard = ...; // resolve ID-card here
request.setIDCard(idCard);
Element body = ...; // build body DOM element here
request.setBody(body);
Document domDocument = request.serialize2DOMDocument();
String xml = XmlUtil.node2String(domDocument, false, true);
//Send xml to Service provider here |
Det reelle arbejde ligger i følgende linier:
Linie 1: Specificering af egenskaber for SOSI, se senere for reference til SOSI-egenskaber
Linie 3: Opbygge/finde instans af Credential Vault.
Linie 11: Opbygge/finde instans af ID-kort.
Linie 15: Opbygning af indhold til XML
Linie 20: Sende XML til serviceprovider
Service Provider
På den "anden side" hos serviceudbyderen bruges biblioteket således. Også her håndterer udvikleren kun ting, der er relateret til forretningsopgaven.
| Code Block | ||||
|---|---|---|---|---|
| ||||
Properties properties = ...;
Federation federation = new SOSIFederation(properties);
CredentialVault credentialVault = ...; // construct or resolve credentialvault here
SOSIFactory factory = new SOSIFactory(federation, credentialVault, properties);
// This implicitely verifies the STS signature on the ID card etc.
Request request = factory.deserializeRequest(xml);
IDCard idCard = request.getIDCard();
// use ID card attributes for authorization here
Element body = request.getBody();
// use information in body for business logic here
Reply reply = factory.createNewReply(
request, // dgws version and”In response to” ID
null // Optional flow-ID set to null
);
reply.setIDCard(idCard);
Element replyBody = ...; // build reply body DOM element here
reply.setBody(replyBody);
Document domDocument = reply.serialize2DOMDocument();
String replyXML = XmlUtil.node2String(domDocument, false, true);
// Send replyXML to Service provider here |
| Footnotes Display | ||
|---|---|---|
|