Nella precedente lezione abbiamo introdotto uno standard che punta a presentare nel WSDL le regole di sicurezza implementate nel server. In questa lezione presenteremo un esempio di implementazione del meccanismo su JBoss, ricalcando l’esempio fatto in precedenza riguardante l’integrazione di un token di tipo UsernameToken
nell’header del messaggio SOAP.
Server e client, struttura del progetto
Considerando le modifiche da apportare al WSDL, lato server possiamo utilizzare un progetto nuovo, ad esempio una copia di quello precedente come fatto nei codici sorgenti allegati alla guida, chiamandolo questa volta PresentazioneServerWSSecurityPolicy
.
Andiamo quindi a modificare il WSDL aggiungendo una policy dall’identificativo SecurityServiceBindingPolicy, aggregandola all’elemento binding del WSDL. Segue il WSDL aggiornato con l'esposizione del codice del file denominato documento.wsdl
.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<definitions name="TestSicurezza"
targetNamespace="http://www.prova.documento.test/"
xmlns:tns="http://www.prova.documento.test/"
xmlns:schema="http://www.prova.schema.test/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsaws="http://www.w3.org/2005/08/addressing"
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<types> … </types>
<message name="PresentazioneReq"> … </message>
<message name="PresentazioneResp"> … </message>
<portType name="ServizioPresentazioneIF"> … /portType>
<binding name="ServizioPresentazioneImplPortBinding" type="tns:ServizioPresentazioneIF">
<wsp:PolicyReference URI="#SecurityServiceBindingPolicy" />
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Presentazione"> … </operation>
</binding>
<wsp:Policy wsu:Id="SecurityServiceBindingPolicy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
<service name="PresentazioneService"> … </service>
</definitions>
Le sezioni non modificate sono state in gran parte sostituite con puntini sospensivi. Da notare in primo luogo i nuovi namespaces aggiunti al progetto ( nello specifico ws-policy
, wssecurity-utility
, addressing
, securitypolicy
).
Quindi passiamo ad osservare la presenza di un nuovo elemento, Policy
, che ci permette di descrivere le policies che stiamo aggiungendo al WSDL. In questo semplice esempio si tratta di una policy basata su UsernameToken
, descritta da una proprietà del tipo AlwaysToRecipient
, essattamente come abbiamo visto nella lezione precedente, stabilisce che il client ha l’obbligo di specificare il token nell’header.
Abbiano quindi un token che nel caso descritto sarà in chiaro. Segue quindi l’associazione della policy al binding per mezzo dell’ID della policy. Nota particolarmente interessante è che per il WSDL non servirà fare altro, nemmeno ricompilarlo. Sara infatti cura dei frameworks CXF e di Spring gestirne gli aspetti relativi.