Ciao a tutti,
Ho analizzato il supporto per SAML offerto dalla versione attuale di
WSS4J:1.5.0:
Questi i primi risultati:
-Prima limitazione è il fatto che utilizza la versione 1.1 della specifica
SAML, a causa dell'utilizzo della libreria OpenSAML che non supporta ancora
SAML 2.0 (è uscita da pochi giorni una versione "Technology Preview" di
OpenSAML 2 da considerarsi ancora una "alpha").
Allo stato attuale è da escludere una implementazione di SAML 2.0,visto lo
stato incompleto di OpenSAML 2 ed il fatto che l'interfaccia di programmazione
è stata completamente riscritta e non ancora sufficientemente documentata.
Richiederebbe inoltre la modifica di oltre 10 classi in WSS4J che dipendono da
OpenSAML.
-Altro problema è che l'implementazione in WSSS4J è solo un esempio che
permette di creare asserzioni del tipo Authentication prendendo le credenziali
da File.
Sembra fattibile comunque lo sviluppo di un modulo che sostituisca
l'implementazione di esempio org.apache.ws.security.saml.SAMLIssuerImpl con una
che permetta la creazione dinamica di asserzioni di autenticazione e/o
attributi conformi a SAML 1.1.
Per sperimentarne la effettiva fattibilità ho realizzato una classe che invece
di implementare la creazione di una asserzione di autenticazione ne crea una
con un attributo scolpito nel codice (allegata).
-Facendo qualche test ho riscontrato la presenza di un bug che permette la
firma del solo body quando si inserisce una asserzione SAML.
Andando nel codice sorgente ho proposto una patch di wss4j che sembra risolvere
questo problema: http://issues.apache.org/jira/browse/WSS-50. (allegata una
versione con questa modifica di wss4j che però utilizza OpenSAML 1.1 invece di
OpenSAML 1.0.1 come di default in Axis 1.5.0)
-E' stato rilevato anche un altro problema relativo a come Axis serializza i
messaggi SOAP contenenti le firme digitali e che potrebbe creare problemi di
interoperabilità, ma di cui al momento non vedo soluzioni:
http://mail-archives.apache.org/mod_mbox/ws-wss4j-dev/200607.mbox/ajax/%3c5E0CFF197F04F04882BF85F72B0A667C8EF85E@POSTA01.itmaster.local%3e
Se volete provare questa "proof of concept" di SAML e OpenSPCoop oltre alla
nuova classe dovete inserire le due librerie in deploy/pdd/required_libs e
saml3.properties in deploy/pdd/properties/crypto modificando il build.xml come
in allegato e configurando come segue i servizi:
PORTA DELEGATA
<request-flow>
<parameter nome="action"
valore="Timestamp SAMLTokenSigned"/>
<parameter nome="samlPropFile" valore="saml3.properties"/>
<parameter nome="signatureKeyIdentifier"
valore="DirectReference"/>
<parameter nome="user" valore="portadelegata"/>
<parameter nome="passwordCallbackClass"
valore="org.openspcoop.wssecurity.PWCallbackSend"/>
<parameter nome="signaturePropFile"
valore="pd-crypto.properties"/>
<parameter nome="timeToLive" valore="600"/>
<parameter nome="mustUnderstand" valore="true"/>
<parameter nome="signatureParts"
valore="{Content}{http://schemas.xmlsoap.org/soap/envelope/}Body;
{Content}{http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/}Intestazione;
{Content}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp;"/>
</request-flow>
PORTA APPLICATIVA
<request-flow>
<parameter nome="action" valore="Timestamp Signature SAMLTokenUnsigned"/>
<parameter nome="signaturePropFile"
valore="pa-crypto.properties"/>
<parameter nome="actionOrderCheck" valore="false"/>
<parameter nome="mustUnderstand" valore="true"/>
<parameter nome="authorizationClass"
valore="org.openspcoop.wssecurity.AuthorizationOKDemo"/>
<parameter nome="decryptionPropFile"
valore="pa-crypto.properties"/>
<parameter nome="passwordCallbackClass"
valore="org.openspcoop.wssecurity.PWCallbackSend"/>
<parameter nome="signatureKeyIdentifier"
valore="DirectReference"/>
</request-flow>
Resta ora da ragionare insieme come passare dinamicamente le informazioni per
costruire le asserzioni alla porta delegata (un header SOAP proprietario?) e
come utilizzarle lato porta applicativa e se e come passarle alla applicazione
che la implementa.
Ciao
Luciano
SAMLAttributeIssuerImpl.java
Description: SAMLAttributeIssuerImpl.java
saml3.properties
Description: saml3.properties
opensaml-1.1.jar
Description: opensaml-1.1.jar
wss4j-1.5.0.jar
Description: wss4j-1.5.0.jar
build.xml
Description: build.xml
|