Versions Compared

Key

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

...

Fra version 2.1 inkluderer Seal.Java nu IDWSHFactory. Version 2.1 markerer begyndelsen af IDWSH-support. Det formodes at fremdidige versioner af Seal.Java vil udvide support og arbejdsgang ved hjælp af IDWSH.
Seal.Java 2.1 understøtter kun IDWSH  IdentityToken. Strømmen til konstruktion og anvendelse af IdentityToken er vist nedenstående figur.

IDWSH Identity  token workflow

OIOSAML-factory

I Seal 2.1.4 blev OIOSAMLFactory introduceret, som giver funktionalitet til at oprette, analysere, underskrive og validere OIOWS-Trust-meddelelser, der bruges ved udveksling af OIOSAML-påstander, der er udstedt af og IdP til SOSI IDCards.

OIOIDWS-factory

Siden Seal 2.5.10 understøttes OIO IDWS.

Eksempel på brug af IDWS hjælpe klasser hjælpeklasser for service udbydere.

Code Block
languagejava
collapsetrue
/* 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));

...