Utilizzo di OpenID Connect per estendere OAuth 2.0

OpenID Connect estende il protocollo OAuth 2.0 per aggiungere un semplice livello di autenticazione e identità 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 il Single Sign-On (SSO) federato.

OAuth 2.0 fornisce i token di sicurezza da utilizzare quando si chiamano le risorse backend per conto di un utente. OAuth consente di concedere o concedere in licenza la possibilità di accedere alle risorse anziché fornire informazioni sull'autenticazione stessa. Usare OAuth per l'autenticazione è come un condominio 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 determinato periodo di tempo. 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 profilo. OpenID Connect consente ai client di tutti i tipi, inclusi 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.

Vengono introdotti due concetti:
  • Token ID OpenID Connect: questo token contiene informazioni sulla sessione autenticata dell'utente.

  • Endpoint UserInfo: questo endpoint consente al client di recuperare ulteriori attributi relativi all'utente.

Implementazione di OpenID Connect

Per implementare OpenID Connect sono necessarie tre azioni principali:

  1. Recupero di 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 seguenti casi d'uso forniscono richieste e risposte di esempio per ottenere il token ID.

  2. Convalida il 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.

  3. Recupera le informazioni di profilo dall'endpoint UserInfo: utilizzando il token di accesso OAuth2, accedere all'endpoint UserInfo per recuperare le informazioni di profilo sull'utente autenticato.

    Il seguente caso d'uso fornisce richieste e risposte di esempio per il recupero delle informazioni del profilo dall'endpoint UserInfo.

Token di identità

Un token di identità è un token protetto dall'integrità e autonomo (in formato JWT (JSON Web Token) definito nello standard OpenID Connect contenente le richieste di risarcimento relative all'utente finale. Il token di identità è l'estensione primaria che OpenID Connect effettua a 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 Base64URL e separate da punti.

Nota

le richieste OpenID Connect devono contenere il valore dell'ambito openid.

OpenID Connect 1.0 è un semplice livello di identità sopra il 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 REST. OpenID Connect consente ai client di tutti i tipi, inclusi 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 Value
amr Riferimenti metodi di autenticazione. Array JSON di stringhe che sono identificativi per i metodi di autenticazione utilizzati nell'autenticazione. Ad esempio, i valori potrebbero indicare che sono stati utilizzati sia la password che i metodi di autenticazione OTP.
at_hash OAuth 2 Valore hash token di accesso.
aud Identifica i destinatari ai quali è destinato questo token ID. Deve essere la versione 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 così il tipo di token (IT) in un'asserzione utente del dominio di Identity IAM.
authn_strength* Valore restituito da SSO cloud che indica l'efficacia dell'autenticazione dal contesto AuthN.
auth_time Il tempo (tempo di epoca UNIX) in cui Cloud SSO ha effettivamente autenticato 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 se il token ID ha un singolo valore audience e tale audience è diversa dalla parte autorizzata. Può essere incluso anche quando la parte autorizzata è la stessa dell'unico pubblico. Il valore azp fa distinzione tra maiuscole e minuscole e contiene un valore StringOrURI.
exp L'ora di scadenza (ora di epoca UNIX) corrispondente o successiva alla quale il token ID non deve essere accettato per l'elaborazione. Questo valore deve essere uguale a session_exp.
iat Il tempo (tempo di epoca UNIX) in cui è stato creato il JWT (in secondi). Il tempo di epoca UNIX è 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 di epoca UNIX) in cui la sessione SSO cloud scade (secondi, deve essere la stessa scadenza della sessione SSO nel contesto AuthN).
sid ID sessione da Cloud SSO (255 caratteri ASCII al massimo) dal contesto AuthN.
sub Identifica l'utente. L'identificativo dell'oggetto è localmente univoco, non viene mai riassegnato ed è destinato a 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 secondario nell'archivio 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 dell'assistenza clienti (CSR).
user_id* GUID del dominio di Identity IAM dell'utente dal contesto AuthN.
user_lang* Lingua preferita dall'utente.
user_locale* Impostazioni nazionali dell'utente.
user_tenantname* Nome tenant utente (255 caratteri ASCII al massimo). Il GUID del tenant non è stato salvato nel token
user_tz* Il fuso orario dell'utente.

Convalida token identità

Perché convalidare i token? Quando l'applicazione Web controlla le credenziali direttamente, verifica che il nome utente e la password presentati corrispondano a quanto gestito. Quando si utilizza l'identità basata su richieste di rimborso, la mansione viene affidata in outsourcing 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.

Documento di ricerca automatica OpenID

Il protocollo OpenID Connect 1.0 è un semplice livello di identità sopra il 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 aiutarti a scoprire quali sono questi endpoint che devi utilizzare, OpenID Connect ti consente di utilizzare un documento di ricerca automatica, che è 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, userinfo e chiavi pubbliche. È possibile recuperare il documento di ricerca automatica per il servizio OpenID Connect del dominio di Identity IAM da: https://<domainURL>/.well-known/openid-configuration.

Convalida dei token di identità

Un token identità (ID) è un token protetto dall'integrità e autonomo (in formato JSON Web Token) che contiene richieste di risarcimento relative all'utente finale. Rappresenta la sessione di un utente autenticato. Pertanto, il token deve essere convalidato prima che un'applicazione possa ritenere 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.

Il token ID è definito nello standard OpenID Connect ed è l'estensione principale che OpenID Connect effettua a OAuth 2.0 per abilitare l'autenticazione. I token ID sono sensibili e possono essere utilizzati in modo improprio se intercettati. Assicurarsi che questi token vengano gestiti in modo sicuro trasmettendoli solo tramite HTTPS e utilizzando solo i dati POST o all'interno delle intestazioni delle richieste. Se li memorizzi sul tuo server, devi anche memorizzarli in modo sicuro.
  1. Verificare che il valore della richiesta di audience (aud) contenga il valore client_id dell'applicazione. Il claim aud (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 che non sono attendibili dal client.

  2. Verificare che l'ora corrente sia precedente all'ora rappresentata dalla richiesta di tempo di scadenza (exp).

  3. 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 memorizzare nella cache le chiavi pubbliche e, nella maggior parte dei casi, eseguire in modo efficiente la convalida locale. Ciò richiede il recupero e l'analisi dei certificati ed effettuare le chiamate crittografiche appropriate per controllare la firma:
    • Utilizzare qualsiasi libreria JWT disponibile 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 ripristini costanti in caso di attacchi con token fittizi, il recupero/riinserimento nella cache della chiave pubblica deve essere basato su un intervallo di tempo, ad esempio 60 minuti, in modo che i ripristini vengano eseguiti 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();
            }
        }
     
    }
  4. Verificare che il valore della richiesta dell'identificativo emittente (iss) corrisponda esattamente al valore della richiesta iss (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 le informazioni sul profilo, le preferenze e altre informazioni specifiche dell'utente.

Il profilo OpenID Connect è composto da due componenti:

  • Richieste di risarcimento che descrivono l'utente

  • Endpoint UserInfo che fornisce un meccanismo per recuperare queste richieste
    Nota

    Le richieste di rimborso utente possono essere presentate anche all'interno del token ID per eliminare un callback durante il tempo di autenticazione.

Profilo utente - Richieste di risarcimento

L'endpoint UserInfo fornisce un set di richieste basate sugli 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 Richieste restituite

openid

Nessuno - Indica che si tratta di una richiesta OpenID Connect

profile

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, 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

Dopo che l'applicazione client ha autenticato un utente e dispone del 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 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 del codice di autorizzazione restituisce un codice di autorizzazione al client, che può quindi scambiare il codice per un token ID e un token di accesso direttamente.

Ciò offre il vantaggio di non esporre alcun token all'agente utente (ad esempio un browser Web) e, 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 del codice di autorizzazione funziona sia con i clienti riservati che con i clienti pubblici.

Client riservati

Nel flusso del codice di autorizzazione sono disponibili due fasi:
  1. Richiedere il codice di autorizzazione. In questa richiesta, il valore del parametro di ambito è openid. Questo è un valore di specifica 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 l'ambito openid che quello della risorsa OAuth:

      https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
  2. Richiedere il token. Il client estrae il parametro di codice dalla risposta e fa la richiesta di token. Inoltre, il client fornisce il proprio ID client e 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. Nel flusso Codice autorizzazione sono disponibili due passi. Le richieste comportano una richiesta GET basata su browser, quindi una richiesta POST multicanale per ottenere il token di accesso.

  1. 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 alle richieste e alle risposte del client riservato discusse in precedenza.
    https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
  2. Richiedere il token.

    Esempio di richiesta

    Nota

    Questa richiesta è diversa dalla richiesta del client riservato in cui l'ID client e il segreto client sono specificati nell'intestazione dell'autenticazione di base. Nel flusso client pubblico non è presente alcuna intestazione di autenticazione Basic. L'ID client è 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 come 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'agente utente dell'utente (ad esempio un browser Web).

Nessuna richiesta di token programmatico/back-channel coinvolta in questo flusso, ad esempio la richiesta del client pubblico nell'esempio di flusso del codice di autorizzazione. Tutti i token vengono restituiti dall'endpoint Authorization e l'endpoint token non viene utilizzato. Il flusso implicito funziona con clienti riservati, affidabili e pubblici.
Nota

I client pubblici non dispongono di credenziali, ma solo di un identificativo client.

Con il flusso implicito sono supportati i seguenti valori response_type:

  • id_token (token ID)

  • token (token di accesso)

  • id_token token (sia il token ID che il token di accesso)

Recupero di un token ID

Nel flusso implicito sono disponibili tre passaggi per ottenere un token ID:
  1. 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
  2. L'utente esegue il login e fornisce il consenso (in base agli ambiti richiesti)

  3. 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

Recupero di un token di accesso

Nel flusso implicito sono disponibili tre passi per ottenere un token di accesso:

  1. 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
  2. L'utente esegue il login e fornisce il consenso (in base agli ambiti richiesti).

  3. 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

Recupero di un token ID e di un token di accesso

Nel flusso implicito sono disponibili tre passaggi per ottenere sia il token ID che il token di accesso:
  1. Richiedere il token ID e di accesso.

    Esempio di richiesta
    https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijkl
  2. L'utente esegue il login e fornisce il consenso (in base agli ambiti richiesti).

  3. Risposta con token di accesso e token ID.

    Esempio di risposta
    Nota

    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 browser ottiene il codice di autorizzazione e il token ID e può quindi personalizzare il contenuto dell'interfaccia utente. Il componente backend ottiene il token di accesso per eseguire chiamate API business.

I clienti devono supportare sia richieste e risposte basate su browser sia richieste e risposte programmatiche/back-channel per utilizzare il flusso ibrido. Il flusso ibrido funziona sia con i clienti riservati che con i clienti pubblici. Con il flusso ibrido sono supportati i seguenti valori response_type:

  • code id_token (token ID)

  • code token (token di accesso)

  • code id_token token (codice di autorizzazione, token ID e token di accesso)

Recupero di un token ID

Nel flusso ibrido sono disponibili quattro passaggi per ottenere sia il codice di autorizzazione che il token ID:
  1. 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
  2. L'utente esegue il login e fornisce il consenso (in base agli ambiti richiesti).

  3. 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
  4. L'applicazione client utilizza il codice di autorizzazione ed effettua una richiesta di canale secondario per ottenere un nuovo token di accesso e di aggiornamento dei token.

    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"
    }

Recupero di un token di accesso

Nel flusso ibrido sono disponibili quattro passaggi per ottenere il codice di autorizzazione e il token di accesso:

  1. 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
  2. L'utente esegue il login e fornisce il consenso (in base agli ambiti richiesti).

  3. 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
  4. L'applicazione client utilizza il codice di autorizzazione ed effettua una richiesta di canale secondario per ottenere un nuovo token di accesso.

    Esempio di richiesta
       curl -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
    }

Recupero di un token ID e di un token di accesso

Nel flusso ibrido sono disponibili quattro passaggi per ottenere il codice di autorizzazione, il token ID e il token di accesso:
  1. Richiedere il codice di autorizzazione e il token ID.

    Esempio di richiesta
    https://<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
  2. L'utente esegue il login e fornisce il consenso (in base agli ambiti richiesti).

  3. Risposta con token ID e 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....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004
  4. L'applicazione client utilizza il codice di autorizzazione ed effettua una richiesta di canale secondario per ottenere un nuovo token di accesso.

    Esempio di richiesta
       curl -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.

È possibile richiedere un logout mediante OpenID Connect in due modi:

  1. Reindirizza al client che ha avviato il logout.

    Nota

    Assicurarsi di definire l'URI di reindirizzamento dopo il logout per l'applicazione client OAuth e che il token ID venga inviato nella richiesta. Il token ID contiene l'ID client. L'URL di post logout corrispondente dell'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>
  2. Utilizzare la pagina di arrivo del tenant.

    Nota

    In questo modo viene utilizzata la pagina di arrivo del tenant impostata nelle impostazioni SSO del tenant.

    Esempio di richiesta

    https://<domainURL>/oauth2/v1/userlogout