Strumenti Utente

Strumenti Sito


guide_pubbliche:howto:identity:shibbolethsp_config

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
guide_pubbliche:howto:identity:shibbolethsp_config [2025/01/16 09:36]
riccardo.cappone@unipr.it [Ruoli]
guide_pubbliche:howto:identity:shibbolethsp_config [2025/09/30 11:22] (versione attuale)
riccardo.cappone@unipr.it [PKCE (Proof Key for Code Exchange)]
Linea 75: Linea 75:
 Per tutti gli entityID non riferiti al dominio unipr.it occorre concordare il rilascio degli attributi, che saranno filtrati e rilasciati in maniera puntuale da parte del nostro IdP. Per tutti gli entityID non riferiti al dominio unipr.it occorre concordare il rilascio degli attributi, che saranno filtrati e rilasciati in maniera puntuale da parte del nostro IdP.
  
 +Logout URL che il service provider può utilizzare per attivare la funzione di SLO 
 +**https://​shibidp.unipr.it/​idp/​profile/​Logout**
  
 ===== Istruzioni ===== ===== Istruzioni =====
Linea 186: Linea 187:
   ​   ​
   ​   ​
-===== Flusso autorizzativo adottato dal nostro OP =====+===== Flusso autorizzativo ​implicito ​adottato dal nostro OP ===== 
 +(solo per i casi di necessità di Token Immediati, Senza Chiamate Back-Channel) 
 response_type => id_token (implicit flow) response_type => id_token (implicit flow)
   ​   ​
Linea 194: Linea 197:
 {{:​guide_pubbliche:​howto:​identity:​response_type_id_token.png?​600|}} {{:​guide_pubbliche:​howto:​identity:​response_type_id_token.png?​600|}}
  
 +
 +===== Flussi autorizzativo adottati dal nostro OP =====
 +
 +   "​response_types_supported":​[
 +      "​id_token",​
 +      "​code",​
 +      "code id_token",​
 +      "code id_token token"
 +   ]
 +   
 +=== response_type => id_token (implicit flow) ===
 +  ​
 +In questa modalità è attivo solamente l'​Authorization Endpoint che dopo l'​autenticazione rilascerà l'ID Token comprensivo dei claim sottoscritti dagli scope. La durata dell'​ID Token è 1h.
 +
 +
 +{{:​guide_pubbliche:​howto:​identity:​response_type_id_token.png?​600|}}
 +
 +
 +=== response_type => code (Authorization code flow) ===
 +  ​
 +Quando il valore di response_type è code, ma openid non è incluso nel parametro di richiesta scope, la richiesta è semplicemente un Authorization Code Flow come definito nella RFC 6749. D'​altra parte, se openid è incluso nel parametro di richiesta scope, viene emesso un ID Token dall'​endpoint token in aggiunta a un Access Token.
 +
 +
 +{{:​guide_pubbliche:​howto:​identity:​code_flow.png?​600|}}  ​
 +
 +=== response_type => code id_token (Hybrid Flow) ===
 +  ​
 +Quando il valore di response_type è code id_token, vengono emessi un codice di autorizzazione e un ID Token dall'​endpoint di autorizzazione,​ e un Access Token e un ID Token vengono emessi dall'​endpoint token.
 +
 +{{:​guide_pubbliche:​howto:​identity:​code_id_token.png?​600|}}
 +
 +
 +=== response_type => code id_token token (Hybrid Flow) ===
 +  ​
 +Quando il valore di response_type è code id_token token, vengono emessi un codice di autorizzazione,​ un Access Token e un ID Token dall'​endpoint di autorizzazione,​ e un Access Token e un ID Token vengono emessi dall'​endpoint token.
 +
 +{{:​guide_pubbliche:​howto:​identity:​code_id_token_token.png?​600|}}
 +   
 +===== PKCE (Proof Key for Code Exchange) =====
 +
 +<WRAP center round tip 60%>
 +Il Codice di Autorizzazione con PKCE (Proof Key for Code Exchange) è oggi lo standard di sicurezza raccomandato per l'​autenticazione OpenID Connect (e l'​autorizzazione OAuth 2.0), in particolare per i client pubblici (come le Single Page Application,​ SPA, o le app mobili native).
 +</​WRAP>​
 +
 +Il flusso del Codice di Autorizzazione è intrinsecamente più sicuro del Flusso Implicito perché gestisce lo scambio dei token sul back-channel (server-to-server),​ lontano dal browser, rendendo i token inaccessibili a JavaScript malevolo.
 +
 +PKCE aggiunge un ulteriore livello di sicurezza per i client che non possono custodire un Client Secret (i client pubblici), proteggendo dal rischio che un codice di autorizzazione venga intercettato e utilizzato da un attaccante.
 ===== OIDC client di esempio sviluppato in PhP ===== ===== OIDC client di esempio sviluppato in PhP =====
 [[guide_pubbliche:​howto:​identity:​oidc_client|Esempio di OIDC client scritto in PhP]] [[guide_pubbliche:​howto:​identity:​oidc_client|Esempio di OIDC client scritto in PhP]]
Linea 345: Linea 395:
 [[https://​shibidp.unipr.it/​.well-known/​openid-configuration]] [[https://​shibidp.unipr.it/​.well-known/​openid-configuration]]
  
-Questo URI consente di ottenere l informazioni principali contenute nel Metadata dell'​OP Server di autenticazione/​autorizzazione,​ come ad esempio l'​Authorization Endpoint, il token Endpoint, ​?introspection Endpoint, etc.+Questo URI consente di ottenere l informazioni principali contenute nel Metadata dell'​OP Server di autenticazione/​autorizzazione,​ come ad esempio l'​Authorization Endpoint, il token Endpoint, ​l'introspection Endpoint, etc.
  
 __Specifiche OAuth2 implementate e supportate__:​ __Specifiche OAuth2 implementate e supportate__:​
Linea 364: Linea 414:
   * client_id   * client_id
   * client_secret   * client_secret
-  * resource indicator (obbligatorio ​durante la request autorizzativa ​come parametro)+  * resource indicator (parametro ​obbligatorio ​nella request autorizzativa
 + 
 +il parametro ​resource richiesto dal client, sarà utilizzatto come audience nei token che verranno rilasciati. Questo valore di audience sarà verificabile solamente dal Server della risorsa che avrà il corrispondente client_id (e client_secretper verificarlo via introspezione. 
  
 Il client deve effettuare la request autorizzativa verso il server di autorizzazione richiedendo obbligatoriamente:​ Il client deve effettuare la request autorizzativa verso il server di autorizzazione richiedendo obbligatoriamente:​
Linea 370: Linea 423:
   * redirect_uri=<​da comunicare preventivamente per la registrazione del Metadata sul Server di autorizzazione>​   * redirect_uri=<​da comunicare preventivamente per la registrazione del Metadata sul Server di autorizzazione>​
   * scope=openid profile email spid offline_access   * scope=openid profile email spid offline_access
 +  * resource=<​fornito in fase di registrazione del Metadata>​
  
 Il metodo di autenticazione da utilizzare quando il Client si autentica con il Server autorizzativo è client_secret_basic (credenziali vengono inviate nell'​intestazione di autorizzazione come una stringa codificata in base64) Il metodo di autenticazione da utilizzare quando il Client si autentica con il Server autorizzativo è client_secret_basic (credenziali vengono inviate nell'​intestazione di autorizzazione come una stringa codificata in base64)
Linea 390: Linea 444:
  
 {{ :​guide_pubbliche:​howto:​identity:​introspection_call.png?​direct&​600 |}} {{ :​guide_pubbliche:​howto:​identity:​introspection_call.png?​direct&​600 |}}
 +
 +Esempio response caso token non valido:
 +
 +{{ :​guide_pubbliche:​howto:​identity:​introspection_failed.png?​direct&​200 |}}
 +
 +Esempio response caso token valido:
 +
 +{{ :​guide_pubbliche:​howto:​identity:​introspection_ok.png?​direct&​300 |}}
  
 ===== Utilizzo dell'​Auth Code ===== ===== Utilizzo dell'​Auth Code =====
Linea 402: Linea 464:
 {{ :​guide_pubbliche:​howto:​identity:​auth_code_request.png?​direct&​600 |}} {{ :​guide_pubbliche:​howto:​identity:​auth_code_request.png?​direct&​600 |}}
  
 +===== Utilizzo del refresh_token =====
 +
 +Il Client può utilizzare il refresh_token per ottenere:
 +  * access_token
 +  * refresh_token
 +
 +Esempio di request utilizzando un refresh_token:​
 +
 +{{ :​guide_pubbliche:​howto:​identity:​refresh_token_request.png?​direct&​600 |}}
 +
 +{{ :​guide_pubbliche:​howto:​identity:​refreeh_aut_code_requests.png?​direct&​800 |}}