XACML-Policy

Questa tipologia di autorizzazione prevede di limitare l’accesso ai soli applicativi o soggetti fruitori che soddisfino una determinata policy XACML. La policy deve essere caricata nel contesto dell’autorizzazione sul controllo degli accessi, come mostrato in Fig. 100.

../../../_images/xacmlPolicyAdd.png

Fig. 100 Registrazione di una XACML-Policy per l’erogazione

In fase di autorizzazione, il gateway costruisce una XACMLRequest contenente tutti i parametri della richiesta, comprese le informazioni relative al chiamante (credenziali ed eventuali ruoli), e la valida rispetto alla XACML-Policy associata all’erogazione. I parametri inseriti nella XACMLRequest, che possono essere utilizzati per effettuare la verifica all’interno di una XACML-Policy, sono i seguenti:

Tabella 2 Parametri inseriti in una XACMLRequest

Nome

Descrizione

Sezione “Action”

org:govway:action:provider

Indica il soggetto erogatore del servizio

org:govway:action:provider:config:<nome>

Proprietà configurate nel soggetto erogatore del servizio

org:govway:action:service

Indica il servizio nel formato tipo/nome

org:govway:action:service:config:<nome>

Proprietà configurate nell’erogazione o nella fruizione

org:govway:action:action

Nome dell’operazione del servizio invocata

org:govway:action:url

Url di invocazione utilizzata dal mittente

org:govway:action:url:parameter:NOME_PARAM

Tutti i parametri presenti nell’url di invocazione saranno inseriti nella XACMLRequest con questo formato

org:govway:action:transport:header:NOME_HDR

Tutti gli header http presenti nell’url di invocazione saranno inseriti nella XACMLRequest con questo formato

org:govway:action:soapAction

Valore della SOAPAction

org:govway:action:gwService

Ruolo della transazione (inbound/outbound)

org:govway:action:protocol

Modalità associata al servizio richiesto (es. spcoop)

org:govway:action:token:audience

Destinatario del token

org:govway:action:token:scope

Lista di scopes

org:govway:action:token:jwt:claim:<nome>

Tutti i claims presenti nel jwt validato

org:govway:action:token:introspection:claim:<nome>

Tutti i claims presenti nella risposta del servizio di introspection

Sezione “Subject”

org:govway:subject:organization

Indica il soggetto fruitore

org:govway:subject:organization:config:<nome>

Proprietà configurate nel soggetto fruitore

org:govway:subject:client

Identificativo dell’applicativo client

org:govway:subject:client:config:<nome>

Proprietà configurate nell’applicativo client

org:govway:subject:credential

Rappresenta la credenziale di accesso (username, subject o il principal) utilizzata dal client per richiedere il servizio

org:govway:subject:role

Elenco dei ruoli che possiede il client che ha richiesto il servizio

org:govway:subject:token:issuer

Issuer del token

org:govway:subject:token:subject

Subject del token

org:govway:subject:token:username

Username dell’utente cui è associato il token

org:govway:subject:token:clientId

Identificativo del client che ha negoziato il token

org:govway:subject:token:client

Identificativo dell’applicativo client registrato su GovWay e identificato tramite il clientId presente nel token (nel seguito applicativo token)

org:govway:subject:token:client:config:<nome>

Proprietà configurate nell’applicativo token

org:govway:subject:token:client:organization

Identificativo del soggetto proprietario dell’applicativo token

org:govway:subject:token:client:organization:config:<nome>

Proprietà configurate nel soggetto proprietario dell’applicativo token

org:govway:subject:token:client:role

Elenco dei ruoli che possiede l’applicativo token

org:govway:subject:token:userInfo:fullName

Nome completo dell’utente cui è associato il token

org:govway:subject:token:userInfo:firstName

Nome dell’utente cui è associato il token

org:govway:subject:token:userInfo:middleName

Secondo nome (o nomi aggiuntivi) dell’utente cui è associato il token

org:govway:subject:token:userInfo:familyName

Cognome dell’utente cui è associato il token

org:govway:subject:token:userInfo:eMail

Email dell’utente cui è associato il token

org:govway:subject:token:userInfo:claim:<nome>

Tutti i claims presenti nella risposta del servizio di UserInfo

org:govway:subject:attributes

Elenco dei nomi degli attributi recuperati interagendo con gli Attribute Authority configurati

org:govway:subject:attribute:<nome>

In caso sia configurato un unico Attribute Authority, nella configurazione relativa all”Identificazione Attributi, tutti gli attributi recuperati saranno inseriti nella XACMLRequest con questo formato

org:govway:subject:aa:<attributeAuthority>:attribute:<nome>

In caso siano configurate più Attribute Authority, nella configurazione relativa all”Identificazione Attributi, tutti gli attributi recuperati saranno inseriti nella XACMLRequest con questo formato

Di seguito un esempio di XACMLPolicy che autorizza le richieste dei chiamanti che possiedono il ruolo “Amministratore” ed uno tra i due ruoli “Operatore1” e “Operatore2”:

<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" PolicyId="Policy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides" xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:policy:schema:os http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-policy-schema-os.xsd">
   <Target />
   <Rule Effect="Permit" RuleId="ok">
      <Condition>
         <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
                <SubjectAttributeDesignator AttributeId="org:govway:subject:role" DataType="http://www.w3.org/2001/XMLSchema#string" />
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
                  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Amministratore</AttributeValue>
               </Apply>
            </Apply>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
               <SubjectAttributeDesignator AttributeId="org:govway:subject:role" DataType="http://www.w3.org/2001/XMLSchema#string" />
               <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
                  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Operatore1</AttributeValue>
                  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Operatore2</AttributeValue>
               </Apply>
            </Apply>
         </Apply>
      </Condition>
    </Rule>
    <Rule Effect="Deny" RuleId="ko" />
</Policy>

Un altro esempio di policy che verifica l’uguaglianza tra il valore del claim “sub” presente nel token e quello fornito nel query parameter “sub” è la seguente:

<Policy PolicyId="Policy"
     RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides"
     xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:policy:schema:os http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-policy-schema-os.xsd">
     <Target />
     <Rule Effect="Permit" RuleId="ok">
             <Condition>
                     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:or">

                              <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of-any">
                                     <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/>
                                     <ActionAttributeDesignator
                                         AttributeId="org:govway:action:url:parameter:sub"
                                         DataType="http://www.w3.org/2001/XMLSchema#string"
                                         MustBePresent="false"
                                     />
                                     <ActionAttributeDesignator
                                         AttributeId="org:govway:action:token:introspection:claim:sub"
                                         DataType="http://www.w3.org/2001/XMLSchema#string"
                                         MustBePresent="false"
                                     />
                             </Apply>

                     </Apply>
             </Condition>
     </Rule>
     <Rule Effect="Deny" RuleId="ko" />
</Policy>