.. |br| raw:: html
.. _authXACML: Autorizzazione XACML ~~~~~~~~~~~~~~~~~~~~ GovWay può essere configurato per effettuare verifiche, dei claims ottenuti tramite la validazione dell'access token, più complesse rispetto a quelle descritte nei precedenti paragrafi. Per farlo si deve utilizzare una policy XACML. Per simulare lo scenario utilizzeremo sempre il servizio *Playground* e l'\ *Authorization Server di Google* descritto nella precedente sezione :ref:`validazioneIntrospection`. Per l'autorizzazione verrà caricata su GovWay una XACML Policy, di seguito descritta, che non possiede una vera logica autorizzativa ma serve solo a titolo di esempio per descrivere la funzionalità. .. figure:: ../_figure_howto/oauth_scenario_xacml.png :scale: 80% :align: center :name: quick_oauthXACML_fig Scenario OAuth con autorizzazione XACMLPoliy 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 le informazioni presenti nel token. Nella tabella seguente vengono forniti i dettagli sui nomi dei parametri. .. table:: Parametri XACML :widths: 60 40 :name: quick_xacml_tab ============================================================ ================ Nome Descrizione ============================================================ ================ *Sezione 'Action'* ----------------------------------------------------------------------------- org:govway:action:token:audience Destinatario del token org:govway:action:token:scope Lista di scopes org:govway:action:token:jwt:claim:= Tutti i claims presenti nel jwt validato org:govway:action:token:introspection:claim:= Tutti i claims presenti nella risposta del servizio di introspection org:govway:action:provider Indica il soggetto erogatore del servizio org:govway:action:service Indica il servizio nel formato tipo/nome 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 Profilo di utilizzo associata al servizio richiesto (es. spcoop) *Sezione 'Subject'* ----------------------------------------------------------------------------- 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: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:= Tutti i claims presenti nella risposta del servizio di UserInfo org:govway:subject:organization Indica il soggetto fruitore org:govway:subject:client Identificativo del servizio 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 ============================================================ ================ Di seguito un esempio di XACMLPolicy che traduce in policy l'esempio descritto nella precedente sezione :ref:`authClaims`. La verifica che andiamo a definire è la seguente: - *Audience* (claim 'aud'): contenga l'identificativo dell'applicazione *Playground* come destinatario del token - *Applicazione Client* (claim 'azp'): controlleremo che il client appartenga ad uno delle applicazioni conosciute. Nell'elenco, non inseriremo immediatamente l'identificativo di *Playground* in modo che l'autorizzazione fallisca in un primo test. .. note:: **Per conoscere l’identificativo dell’applicazione Playground** |br| È possibile vedere una precedente transazione terminata con successo per conoscere l'esatto valore associato all'applicazione *Playground* (es. :numref:`quick_oauthStoricoTransazioniOKTokenInfo_fig`). :: < AttributeId="" DataType="http://www.w3.org/2001/XMLSchema#string" /> < AttributeId="" DataType="http://www.w3.org/2001/XMLSchema#string" /> - **Configurazione Controllo degli Accessi** Accedere alla sezione *'Erogazioni'* e selezionare l'API precedentemente registrata *'PetStore v1'*. Dopodichè accedere, dal dettaglio dell'erogazione, alla sezione *'Configurazione'* dove vengono visualizzate le funzionalità attive. Cliccare sulla voce presente nella colonna '*Controllo Accessi*\ ' e procedere con la seguente configurazione all'interno della sezione *'Gestione Token'*: - *Stato*: abilitato - *Policy*: Google - *Validazione JWT*: disabilitato - *Introspection*: abilitato - *User Info*: disabilitato - *Token Forward*: abilitato Procedere inoltre con la seguente configurazione all'interno della sezione *'Autorizzazione'*: - *Autorizzazione - Stato*: xacml-Policy - *Policy*: caricare la xacml policy descritta precedentemente Effettuata la configurazione salvarla cliccando sul pulsante 'Salva'. .. figure:: ../_figure_howto/oauthAutorizzazioneXACMLConfigControlloAccessi.png :scale: 50% :align: center :name: quick_oauthAuthXACML_fig Configurazione OAuth2 - Autorizzazione XACML Policy - **Invocazione API** .. note:: **Reset Cache delle Configurazioni prima di un nuovo test** |br| Le configurazioni accedute da GovWay vengono mantenute in una cache dopo il primo accesso per 2 ore, è quindi necessario forzare un reset della cache. Per farlo accedere alla sezione *'Strumenti' - 'Runtime'* e selezionare la voce *'ResetAllCaches'*. Per effettuare il test utilizzare il token ottenuto come descritto nella sezione :ref:`validazioneIntrospection`. :: curl -v -X PUT "http://127.0.0.1:8080/govway/Ente/PetStore/v2/pet?access_token=ACCESS_TOKEN" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "id": 3, "category": { "id": 22, "name": "dog" }, "name": "doggie", "photoUrls": [ "http://image/dog.jpg" ], "tags": [ { "id": 23, "name": "white" } ], "status": "available" }' L'esito dell'aggiornamento termina con un codice di errore http 403 e una risposta problem+json che riporta la motivazione: :: HTTP/1.1 403 Forbidden Content-Type: application/problem+json Transfer-Encoding: chunked Server: GovWay GovWay-Transaction-ID: 6c13b9ac-3d60-45a6-9130-297a4d832824 { "type":"https://httpstatuses.com/403", "title":"Forbidden", "status":403, "detail":"Il mittente non è autorizzato ad invocare il servizio gw/PetStore (versione:2) erogato da gw/Ente (result-1 DENY code:urn:oasis:names:tc:xacml:1.0:status:ok)", "govway_status":"protocol:GOVWAY-1352" } - **Consultazione Tracce in errore** Attraverso la console *govwayMonitor* è possibile consultare lo storico delle transazioni che sono transitate nel gateway. Dalla :numref:`quick_oauthAuthXACMLNegata_fig` si può vedere come le transazioni generate dopo la configurazione sopra indicata sono terminate con errore con esito *Autorizzazione Negata*. .. figure:: ../_figure_howto/oauthConsultazioneStoricoTransazioniErroreXACML.png :scale: 100% :align: center :name: quick_oauthAuthXACMLNegata_fig Tracce delle invocazioni terminate con errore 'Autorizzazione Negata' Accedendo al dettaglio di una transazione terminata in errore, e visualizzandone i diagnostici è possibile comprendere che l'errore è dovuto ad una decisione 'deny' ottenuta dopo la valutazione della policy: *'(result-1 DENY code:urn:oasis:names:tc:xacml:1.0:status:ok)'*. .. figure:: ../_figure_howto/oauthConsultazioneStoricoTransazioniErroreXACML_diagnostici.png :scale: 100% :align: center :name: quick_oauthAuthXACMLDiagnostici_fig Diagnostici di una invocazione terminata con errore - **Registrazione ClientId corretto nella XACMLPolicy** Di seguito un esempio di XACMLPolicy nella quale tra i valori consentiti per l'applicazione client viene aggiunto l'identificativo di *Playground* in modo che l'autorizzazione termini con successo. :: < AttributeId="" DataType="http://www.w3.org/2001/XMLSchema#string" /> < AttributeId="" DataType="http://www.w3.org/2001/XMLSchema#string" /> - **Aggiornamento XACMLPolicy in Controllo degli Accessi** Tramite la *govwayConsole* accedere nuovamente alla maschera di configurazione '*Controllo Accessi*\ ' dell'API *'PetStore v1'*; all'interno della sezione *'Autorizzare'* caricare la policy aggiornata. - **Nuova invocazione API** .. note:: **Reset Cache delle Configurazioni prima di un nuovo test** |br| Effettuare il reset della cache accedendo alla sezione *'Strumenti' - 'Runtime'* e selezionare la voce *'ResetAllCaches'*. Effettuare una nuova invocazione del test. :: curl -v -X PUT "http://127.0.0.1:8080/govway/Ente/PetStore/v2/pet?access_token=ACCESS_TOKEN" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "id": 3, "category": { "id": 22, "name": "dog" }, "name": "doggie", "photoUrls": [ "http://image/dog.jpg" ], "tags": [ { "id": 23, "name": "white" } ], "status": "available" }' L'esito dell'aggiornamento termina stavolta con successo con un codice http 200 e una risposta json equivalente alla richiesta.