Uso di OpenID Connect per estendere OAuth 2.0
OpenID Connect estende il protocollo OAuth 2.0 per aggiungere un livello di autenticazione e identità semplice che si trova sopra OAuth 2.0.
Utilizzare OpenID Connect quando si desidera che le applicazioni basate su cloud ottengano informazioni sull'identità, recuperino dettagli sull'evento di autenticazione (ad esempio, quando, dove e come si è verificata l'autenticazione) e consentano l'accesso Single Sign-On (SSO) federato.
OAuth 2.0 fornisce token di sicurezza da utilizzare quando si richiamano risorse backend per conto di un utente. OAuth fornisce una concessione o una licenza per accedere alle risorse anziché fornire informazioni sull'autenticazione stessa. Usare OAuth per l'autenticazione è come un gestore di appartamenti che dà a qualcuno che vuole conoscere la tua identità una chiave temporanea per il tuo appartamento. La chiave implica solo il diritto di entrare nell'appartamento per un periodo di tempo specifico. Non significa che l'individuo sia il proprietario.
L'utilizzo di OpenID Connect completa l'immagine fornendo alle applicazioni informazioni sull'utente, il contesto della loro autenticazione e l'accesso alle informazioni del loro profilo. OpenID Connect consente ai client di tutti i tipi, inclusi i client basati su Web, mobile e JavaScript di richiedere e ricevere informazioni sulle sessioni autenticate e sugli utenti finali. Per ulteriori informazioni, vedere OpenID Connect.
Token ID OpenID Connect: questo token contiene informazioni sulla sessione autenticata dell'utente.
Endpoint UserInfo: questo endpoint consente al client di recuperare attributi aggiuntivi relativi all'utente.
Implementazione di OpenID Connect
Per implementare OpenID Connect sono necessarie tre azioni principali:
-
Recupera un token ID OpenID Connect: utilizzare un tipo di privilegio OAuth2 per richiedere un token ID OpenID Connect includendo l'ambito
openid
nella richiesta di autorizzazione.I casi d'uso riportati di seguito forniscono richieste e risposte di esempio per ottenere il token ID.
-
Convalida token ID: convalida il token ID per assicurarsi che provenga da un emittente sicuro e che il contenuto non sia stato manomesso durante il transito.
Il seguente caso d'uso fornisce informazioni su come e cosa convalidare.
-
Recupera le informazioni sul profilo dall'endpoint
UserInfo
: utilizzando il token di accesso OAuth2, accedere all'endpointUserInfo
per recuperare le informazioni sul profilo relative all'utente autenticato.Nel caso d'uso riportato di seguito vengono fornite richieste e risposte di esempio per il recupero delle informazioni sul profilo dall'endpoint
UserInfo
.
Token identità
Un token di identità è un token autonomo protetto dall'integrità (in formato JWT (JSON Web Token) definito nello standard OpenID Connect contenente le richieste relative all'utente finale. Il token di identità è l'estensione primaria che OpenID Connect crea in OAuth 2.0 per abilitare l'autenticazione in un dominio di Identity.
Il token di identità JWT è composto da tre componenti, un'intestazione, un payload e la firma digitale. Seguendo lo standard JWT, queste tre sezioni sono codificate in Base64URL e separate da punti.
Le richieste OpenID Connect devono contenere il valore dell'ambito
openid
. OpenID Connect 1.0 è un livello di identità semplice al di sopra del protocollo OAuth 2.0. Consente a un'applicazione client del dominio di Identity IAM (registrata come client OAuth 2 con ID client e segreto client) di verificare l'identità dell'utente finale in base all'autenticazione eseguita da un server di autorizzazione (AS) e di ottenere informazioni di profilo di base sull'utente finale in modo interoperabile, simile a quello REST. OpenID Connect consente ai client di tutti i tipi, inclusi i client basati su Web, mobile e JavaScript di richiedere e ricevere informazioni sulle sessioni autenticate e sugli utenti finali. Per ulteriori informazioni, vedere OpenID Connect.
Nome | Valore |
---|---|
amr
|
Riferimenti ai metodi di autenticazione. Array JSON di stringhe che sono identificatori per i metodi di autenticazione utilizzati nell'autenticazione. Ad esempio, i valori potrebbero indicare che sono stati utilizzati sia i metodi di autenticazione password che i metodi di autenticazione OTP. |
at_hash
|
OAuth 2 Valore hash token di accesso. |
aud
|
Identifica i destinatari a cui è destinato questo token ID. Deve essere OAuth 2.0 client_id (secondo la specifica OpenID Connect). Questo è il nome del client OAuth (app.name) che sta effettuando la richiesta. Aud contiene anche l'emittente del dominio di Identity IAM, trasformando il tipo di token (IT) in un'asserzione utente del dominio di Identity IAM. |
authn_strength*
|
Valore restituito da Cloud SSO che indica la forza di autenticazione dal contesto AuthN. |
auth_time
|
Ora (ora dell'epoca UNIX) in cui Cloud SSO ha autenticato effettivamente l'utente (in secondi, proveniente dal contesto AuthN). |
azp
|
Parte autorizzata. La parte a cui è stato emesso il token ID. Se presente, deve contenere l'ID client OAuth 2.0 di questa parte. Questa richiesta è necessaria solo quando il token ID ha un unico valore di audience e tale audience è diversa dalla parte autorizzata. Può essere incluso anche quando la parte autorizzata è la stessa dell'unico pubblico. Il valore azp è una stringa con distinzione tra maiuscole e minuscole che contiene un valore StringOrURI. |
exp
|
L'ora di scadenza (ora dell'epoca UNIX) corrispondente o successiva alla quale il token ID non deve essere accettato per l'elaborazione. Questo valore deve essere uguale al valore session_exp. |
iat
|
L'ora (ora dell'epoca UNIX) in cui è stato creato il JWT (in secondi). UNIX Epoch Time è un numero JSON che rappresenta il numero di secondi da 1970-01-01T0:0:0Z misurato in UTC (Coordinated Universal Time) fino alla data/ora. |
iss
|
Il nome principale che ha emesso il token: https://<domainURL>
|
jti
|
Identificativo univoco generato dal server per l'ID JWT. |
nonce
|
Valore stringa utilizzato per associare una sessione client a un token ID e per mitigare gli attacchi di ripetizione. Questo valore viene fornito da Cloud Gate. |
session_exp*
|
L'ora (ora dell'epoca UNIX) di scadenza della sessione SSO cloud (secondi, deve essere la stessa scadenza della sessione SSO nel contesto AuthN). |
sid
|
ID sessione di Cloud SSO (255 caratteri ASCII al massimo) dal contesto AuthN. |
sub
|
Identifica l'utente. L'identificativo dell'oggetto è univoco a livello locale, mai riassegnato e deve essere utilizzato dal client: ID login utente (255 caratteri ASCII al massimo). ID di login dell'utente dal contesto AuthN. |
sub_mappingattr*
|
Attributo utilizzato per trovare il sub nell'area di memorizzazione degli ID. |
tok_type*
|
Identifica il tipo di token: IT |
user_displayname*
|
Nome visualizzato utente (255 caratteri ASCII al massimo) dal contesto AuthN. |
user_csr*
|
Indica (true) che l'utente è un rappresentante del servizio clienti (CSR). |
user_id*
|
GUID del dominio di Identity IAM dell'utente dal contesto AuthN. |
user_lang*
|
La lingua preferita dall'utente. |
user_locale*
|
Le impostazioni nazionali dell'utente. |
user_tenantname*
|
Nome tenant utente (255 caratteri ASCII al massimo). Il GUID del tenant non è stato salvato in modo specifico nel token |
user_tz*
|
Il fuso orario dell'utente. |
Convalida token di identità
Perché convalidiamo i token? Quando l'applicazione Web controlla direttamente le credenziali, verifica che il nome utente e la password presentati corrispondano a ciò che si mantiene. Quando si utilizza un'identità basata su richieste di rimborso, tale mansione viene affidata a un provider di identità.
La responsabilità passa dalla verifica delle credenziali raw alla verifica che il richiedente sia passato attraverso il provider di identità preferito e sia stato autenticato correttamente. Il provider di identità rappresenta l'autenticazione riuscita mediante l'emissione di un token. Prima di poter utilizzare le informazioni o fare affidamento su di esse come asserzione che l'utente ha autenticato, è necessario convalidarle.
OpenID Documento di ricerca automatica
Il protocollo OpenID Connect 1.0 è un livello di identità semplice al di sopra del protocollo OAuth 2.0 che richiede l'uso di più endpoint per l'autenticazione degli utenti e per la richiesta di risorse che includono informazioni utente, token e chiavi pubbliche. Per facilitare la ricerca automatica degli endpoint da utilizzare, OpenID Connect consente di utilizzare un documento di ricerca automatica, ovvero un documento JSON trovato in una posizione ben nota. Questo documento di ricerca automatica contiene coppie chiave/valore che forniscono dettagli sulla configurazione del provider OpenID Connect, inclusi gli URI degli endpoint di autorizzazione, token, informazioni utente e chiavi pubbliche. È possibile recuperare il documento di ricerca automatica per il servizio OpenID Connect del dominio di Identity IAM dal seguente indirizzo: https://<domainURL>/.well-known/openid-configuration.
Convalida dei token di identità
Un token ID (Identity) è un token self-contained protetto dall'integrità (in formato JSON Web Token) che contiene richieste relative all'utente finale. Rappresenta la sessione di un utente autenticato. Pertanto, il token deve essere convalidato prima che un'applicazione possa considerare attendibile il contenuto del token ID. Ad esempio, se un utente malintenzionato ha ripetuto il token ID di un utente acquisito in precedenza, l'applicazione dovrebbe rilevare che il token è stato ripetuto o è stato utilizzato dopo la scadenza e negare l'autenticazione.
-
Verificare che il valore della richiesta di audience (
aud
) contenga il valoreclient_id
dell'applicazione. Il claimaud
(audience) può contenere un array con più elementi. Il token ID deve essere rifiutato se il token ID non elenca il client come audience valida o se contiene audience aggiuntive non attendibili dal client. -
Verificare che l'ora corrente sia precedente all'ora rappresentata dalla richiesta di scadenza (
exp
). -
Verificare che il token ID sia firmato correttamente dall'emittente. I token emessi dal dominio di Identity vengono firmati utilizzando uno dei certificati trovati nell'URI specificato nel campo
jwks_uri
del documento di ricerca automatica.-
Recuperare il certificato pubblico del tenant dall'endpoint
SigningCert/jwk
(ad esempio,https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk
).Nota
Poiché i domini di Identity cambiano raramente le chiavi pubbliche, è possibile inserire nella cache le chiavi pubbliche e, nella stragrande maggioranza dei casi, eseguire in modo efficiente la convalida locale. Ciò richiede il recupero e l'analisi dei certificati e l'esecuzione delle chiamate crittografiche appropriate per controllare la firma: -
Utilizzare le librerie JWT disponibili per convalidare, ad esempio, la libreria JWT Nimbus di Connect2id per Java. Per un elenco delle librerie disponibili, vedere JWT.
Nota
In caso di errore di convalida della firma, per evitare riavvii costanti in caso di attacchi con token fasulli, il re-fetching/re-caching della chiave pubblica deve essere basato su un intervallo di tempo, ad esempio 60 minuti, in modo che i riavvii si verifichino solo ogni 60 minuti.
Esempio
package sample; import java.net.MalformedURLException; import java.net.URL; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.jwk.source.RemoteJWKSet; import com.nimbusds.jose.proc.JWSKeySelector; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; import com.nimbusds.jwt.JWTClaimsSet; import com.nimbusds.jwt.proc.ConfigurableJWTProcessor; import com.nimbusds.jwt.proc.DefaultJWTProcessor; public class TokenValidation { public static void main(String[] args) { try { String tokenValue = "eyJ4NXQjUzI1....W9J4oQ"; ConfigurableJWTProcessor jwtProcessor = new DefaultJWTProcessor(); // change t JWKSource keySource = new RemoteJWKSet(new URL("https://<domainURL>/admin/v1/SigningCert/jwk")); // The expected JWS algorithm of the token (agreed out-of-band) JWSAlgorithm expectedJWSAlg = JWSAlgorithm.RS256; // Configure the JWT processor with a key selector to feed matching public // RSA keys sourced from the JWK set URL JWSKeySelector keySelector = new JWSVerificationKeySelector(expectedJWSAlg, keySource); jwtProcessor.setJWSKeySelector(keySelector); // Process the token SecurityContext ctx = null; // optional context parameter, not required here JWTClaimsSet claimsSet = jwtProcessor.process(tokenValue, ctx); // Print out the token claims set System.out.println(claimsSet.toJSONObject()); } catch (Exception e) { e.printStackTrace(); } } }
-
-
Verificare che il valore della richiesta di identificazione emittente (
iss
) corrisponda esattamente al valore della richiesta di rimborsoiss
(emittente):https://<domainURL>/
Esecuzione di query sull'endpoint UserInfo
L'endpoint UserInfo
di OpenID Connect viene utilizzato da un'applicazione per recuperare le informazioni sul profilo relative all'identità autenticata. Le applicazioni possono utilizzare questo endpoint per recuperare informazioni sul profilo, preferenze e altre informazioni specifiche dell'utente.
Il profilo OpenID Connect è composto da due componenti:
-
Richieste che descrivono l'utente
-
Endpoint
UserInfo
che fornisce un meccanismo per recuperare queste richiesteNota
Le richieste utente possono essere presentate anche all'interno del token ID per eliminare un callback durante il tempo di autenticazione.
Richieste di risarcimento profilo utente
L'endpoint UserInfo
fornisce un set di richieste in base agli ambiti OAuth2 presentati nella richiesta di autenticazione. OpenID Connect definisce cinque valori di ambito mappati a un set specifico di richieste predefinite:
Ambito OpenID Connect | Sinistri restituiti |
---|---|
openid |
Nessuno: indica che si tratta di una richiesta OpenID Connect |
profilo |
nome, family_name, given_name, middle_name, nickname, preferred_username, profilo, immagine, sito web, genere, data di nascita, zoneinfo, locale, updated_at |
indirizzo |
indirizzo |
|
e-mail, email_verified |
telefono |
phone_number, phone_number_verified |
Il client deve presentare le proprie credenziali e un token di accesso. Il token di accesso presentato deve contenere l'ambito openid
.
Se un ambito viene omesso (ad esempio, l'ambito email
non viene utilizzato), la richiesta (email
) non sarà presente nelle richieste restituite.
Esempio di richiesta endpoint UserInfo di esempio
Dopo che l'applicazione client ha autenticato un utente e ha il token di accesso, il client può quindi effettuare una richiesta all'endpoint UserInfo
per recuperare gli attributi richiesti relativi a un utente. L'esempio riportato di seguito mostra un esempio di richiesta.
curl -i
-H 'Content-Type: application/x-www-form-urlencoded'
-H 'Authorization: Bearer eyJ4NXQjUzI1....rtApFw'-H 'Accept: */*'
-H 'Content_Language: en-US'--request GET https://<domainURL>/oauth2/v1/userinfo
Esempio di risposta
Una risposta riuscita restituisce una risposta HTTP 200 OK e le richieste dell'utente in formato JSON:
{
"birthdate":"",
"email":"user@example.com",
"email_verified":false,
"family_name":"user",
"gender":"",
"given_name":"user",
"appRoles":[],
"name":"alice alice",
"preferred_username":"user@example.com",
"sub":"user@example.com",
"updated_at":1495136783,"website":""
}
Prima che l'applicazione client possa considerare attendibili i valori restituiti dall'endpoint UserInfo
(ad esempio, come controllo dell'attacco di sostituzione del token), il client deve verificare che la richiesta sub
restituita dalla richiesta dell'endpoint UserInfo
corrisponda all'oggetto del token ID.
Utilizzo del flusso del codice di autorizzazione con OpenID Connect
Utilizzare il flusso Codice di autorizzazione quando si dispone di client in grado di gestire in modo sicuro un segreto client tra se stessi e il server di autorizzazione. Il flusso Codice di autorizzazione restituisce un codice di autorizzazione al client, che può quindi scambiare direttamente il codice per un token ID e un token di accesso.
Ciò offre il vantaggio di non esporre alcun token all'agente utente (ad esempio un browser Web) ed eventualmente ad altre applicazioni dannose con accesso all'agente utente. Il server di autorizzazione può anche autenticare il client prima di scambiare il codice di autorizzazione per un token di accesso. Il flusso Codice di autorizzazione funziona sia con i clienti riservati che con i clienti pubblici.
Clienti riservati
Richiedere il codice di autorizzazione. In questa richiesta il valore del parametro di ambito è
openid.
Questo è un valore di specifica di OpenID Connect.Esempio di richiesta
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid
Esempio di risposta
https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
È possibile fornire valori di ambito aggiuntivi nelle richieste, ad esempio:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=phone+openid+offline_access+profile+address+email
Questa richiesta contiene sia openid che un ambito di risorsa OAuth:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
Richiedere il token. Il client estrae il parametro di codice dalla risposta ed effettua la richiesta del token. Inoltre, il client fornisce il proprio ID client e il proprio segreto come parte dell'intestazione di autenticazione di base.
Esempio di richiesta
curl -i -H 'Authorization: Basic ZWE1OGIwNDA0N2ZkNGQ4MTgyYThiYWQ0ZTNkMGFmZjU6ZGMxNGE4MjMtZGU2OC00YWNhLTg1OWUtMWNhZTJmNjQ0NTBi' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXv9lZQ???.jF9NCA'
Esempio di risposta
La richiesta contiene sia il token di accesso che il token ID.
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Clienti pubblici
I client pubblici non dispongono di credenziali, ma di un identificativo client. Il flusso Codice autorizzazione prevede due passi. Le richieste riguardano una richiesta GET basata su browser e quindi una richiesta POST back-channel per ottenere il token di accesso.
-
Richiedere il codice di autorizzazione.
Esempio di richiesta
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234
Esempio di risposta
Nota
Questi esempi di richiesta e risposta sono simili alla richiesta e alle risposte del client riservato discusse in precedenza.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
-
Richiedere il token.
Esempio di richiesta
Nota
Questa richiesta è diversa dalla richiesta Client riservato in cui l'ID client e il segreto client sono specificati nell'intestazione Autenticazione di base. Nel flusso client pubblico non è presente alcuna intestazione di autenticazione di base. L'ID client viene specificato come parte del payload della richiesta.curl -i -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-code>&reidrect_uri=<client-redirect-uri>&client_id=<client-id>'
Esempio di risposta
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Utilizzo del flusso implicito con OpenID Connect
Utilizzare il flusso Implicito quando è stato implementato un client basato su browser utilizzando un linguaggio di script, ad esempio JavaScript. Il token di accesso e il token ID vengono restituiti direttamente al client, che può esporre questi token all'utente e alle applicazioni che hanno accesso all'user agent dell'utente (ad esempio un browser Web).
Authorization
e l'endpoint token
non viene utilizzato. Il flusso implicito funziona con clienti riservati, fidati e pubblici.I client pubblici non dispongono di credenziali, ma solo di un identificativo client.
I seguenti valori response_type
sono supportati con il flusso implicito:
-
id_token
(token ID) -
token
( Token di accesso) -
id_token token
(sia il token ID che il token di accesso)
Come ottenere un token ID
Richiedere il token.
Esempio di richiesta
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefg
L'utente effettua l'accesso e fornisce il consenso (in base agli ambiti richiesti)
Risposta con token ID
Esempio di risposta
Nota
Tutti i parametri di risposta vengono aggiunti al componente frammento dell'URI di reindirizzamento.https://<domainURL>/#id_token=eyJ4NXQjUzI1.....gF5uyQ
Come ottenere un token di accesso
Il flusso implicito prevede tre passi per ottenere un token di accesso:
-
Richiedere il token di accesso.
Esempio di richiesta
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile
-
L'utente effettua l'accesso e fornisce il consenso (in base agli ambiti richiesti).
-
Risposta con token di accesso
Esempio di risposta
Nota
Tutti i parametri di risposta vengono aggiunti al componente frammento dell'URI di reindirizzamento.https://<domainURL>/#access_token=eyJ4NXQjUzI1...4WGvJQ&token_type=Bearer&expires_in=3600
Come ottenere un token ID e un token di accesso
Richiedere il token ID e il token di accesso.
Esempio di richiestahttps://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijkl
L'utente effettua l'accesso e fornisce il consenso (in base agli ambiti richiesti).
Risposta con token di accesso e ID.
Esempio di rispostaNota
Tutti i parametri di risposta vengono aggiunti al componente frammento dell'URI di reindirizzamento.https://<domainURL>/#access_token=eyJ4NXQjUzI....XWGmeQ&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=3600
Utilizzo del flusso ibrido con OpenID Connect
Utilizzare il flusso ibrido quando si desidera ottenere i token separatamente sia dal canale anteriore che dal canale posteriore. Ad esempio, si dispone di un componente del browser come JavaScript e di un componente del server backend come Node.js. Il componente del browser ottiene il codice di autorizzazione e il token ID e quindi può personalizzare il contenuto dell'interfaccia utente. Il componente backend ottiene il token di accesso per eseguire le chiamate API business.
I clienti devono supportare sia le richieste e le risposte basate su browser sia le richieste e le risposte programmatiche/back-channel per utilizzare il flusso ibrido. Il flusso ibrido funziona sia con i clienti riservati che con i clienti pubblici. I seguenti valori response_type
sono supportati con il flusso ibrido:
-
code id_token
(token ID) -
code token
(Token di accesso) -
code id_token token
(Codice autorizzazione, Token ID e Token di accesso)
Come ottenere un token ID
Richiedere il codice di autorizzazione e il token ID.
Esempio di richiesta
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code id_token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test+openid+offline_access&nonce=abcdefghijk
L'utente effettua l'accesso e fornisce il consenso (in base agli ambiti richiesti).
Risposta con token ID e codice di autorizzazione.
Esempio di risposta
Nota
Tutti i parametri di risposta vengono aggiunti al componente frammento dell'URI di reindirizzamento.https://<domainURL>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_Q
L'applicazione client utilizza il codice di autorizzazione ed effettua una richiesta sul canale secondario per ottenere un nuovo token di accesso e token di aggiornamento.
Esempio di richiesta
curl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAUrAi0l???.CA%3D'
Esempio di risposta
{ "access_token":"eyJ4NXQjUzI1....sJ5mCw", "token_type":"Bearer", "expires_in":3600, "refresh_token":"AQIDBAUwxxoC....tZLvA" }
Come ottenere un token di accesso
Il flusso ibrido prevede quattro passi per ottenere il codice di autorizzazione e il token di accesso:
-
Richiedere il codice di autorizzazione e il token di accesso.
Esempio di richiesta
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test
-
L'utente effettua l'accesso e fornisce il consenso (in base agli ambiti richiesti).
-
Risposta con token ID e codice di autorizzazione.
Esempio di risposta
Nota
Tutti i parametri di risposta vengono aggiunti al componente frammento dell'URI di reindirizzamento.https://<domainURL>/#access_token=eyJ4NXQjUzI1....Pudw9A&code=AQIDBAU6d6Ae....F9NCA=&token_type=Bearer&expires_in=3600
-
L'applicazione client utilizza il codice di autorizzazione ed effettua una richiesta di canale secondario per ottenere un nuovo token di accesso.
Esempio di richiestacurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*'' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAU6d6Ae...NCA%3D'
Esempio di risposta
{ "access_token":"eyJ4NXQjUzI1....Tgs9LA", "token_type":"Bearer", "expires_in":3600 }
Come ottenere un token ID e un token di accesso
Richiedere il codice di autorizzazione e il token ID.
Esempio di richiestahttps://<domainURL>/oauth2/v1/authorize?client_id=client_id&response_type=cod id_token token&redirect_uri=client_redirect_uri&scope=http://<domainURL>/test+openid&nonce=abcdaer
L'utente effettua l'accesso e fornisce il consenso (in base agli ambiti richiesti).
Risposta con token ID e token di accesso.
Esempio di rispostaNota
Tutti i parametri di risposta vengono aggiunti al componente frammento dell'URI di reindirizzamento.https://<domainURL>/#access_token=eyJ4NXQjUzI1....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004
L'applicazione client utilizza il codice di autorizzazione ed effettua una richiesta di canale secondario per ottenere un nuovo token di accesso.
Esempio di richiestacurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' ?request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXUbLmS???.NCA%3D'
Esempio di risposta
{ "access_token":"eyJ4NXQjUzI1....g52XmQ", "token_type":"Bearer", "expires_in":3600, "id_token":"eyJ4NXQjUzI1....f6JfWA" }
Uso di OpenID Connect per il logout
È possibile utilizzare OpenID Connect per le richieste di logout basate su browser.
Sono disponibili due modi per richiedere il logout mediante OpenID Connect:
-
Reindirizza al client che ha avviato il logout.
Nota
Assicurarsi di definire l'URI di reindirizzamento successivo al logout per l'applicazione client OAuth e che il token ID venga inviato nella richiesta. Il token ID contiene l'ID del client. L'URL successivo al logout di tale ID client viene recuperato e convalidato.Esempio di richiesta
https://<domainURL>/oauth2/v1/userlogout?post_logout_redirect_uri=http://clienthost:port/myapp/return&state=c3004d28&id_token_hint=<IDToken>
-
Utilizzare la pagina di arrivo del tenant.
Nota
Viene utilizzata la pagina di arrivo del tenant impostata nelle impostazioni SSO del tenant.Esempio di richiesta
https://<domainURL>/oauth2/v1/userlogout