Ho aggiunto una gestione minimale delle autorizzazioni di accesso ai servizi
basata sul soggetto che firma la richiesta.
Oltre a WSSReceiver ho aggiunto nel package org.openspcoop.wssecurity
l'interfaccia Authorization e le classi AuthorizationOKDemo e
AuthorizationKODemo che allego.
La classe di autorizzazione deve essere realizzata dall'utilizzatore della
porta implementando l'interfaccia org.openspcoop.wssecurity.Authorization ed il
suo nome definito con il parametro "authorizationClass" nella sezione
WS-Security in questo modo:
<ws-security>
<request_flow>
....
<parameter name="authorizationClass"
value="org.openspcoop.wssecurity.AuthorizationOKDemo"/>
Le due classi AuthorizationOKDemo e AuthorizationKODemo sono delle
implementazioni vuote che rispettivamente concedono e negano sempre l'accesso
al servizio.
L'interfaccia del metodo di autorizzazione per ora è questa:
public boolean authorize(String principal, String servizio, String azione)
Si potrebbe pensare anche ad una versione più forte che comprenda anche il
soggetto della busta di e-gov per verificare che sia legato in qualche modo al
principal del certificato di firma. Se vi piace questa possibilità si può
aggiungere.
P.S.
Le parti da firmare comprendono anche il Timestamp quindi il parametro
signatureParts dovrebbe essere sempre così:
<parameter name="signatureParts"
value="{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;"/>
Ciao
Luciano
WSSReceiver.java
Description: WSSReceiver.java
AuthorizationKODemo.java
Description: AuthorizationKODemo.java
Authorization.java
Description: Authorization.java
AuthorizationOKDemo.java
Description: AuthorizationOKDemo.java
|