Tipo di autorizzazione codice

Utilizzare questo tipo di privilegio quando si desidera ottenere un codice di autorizzazione utilizzando un server di autorizzazione come intermediario tra l'applicazione client e il proprietario della risorsa che utilizza i domini di identità.

Nel diagramma seguente viene visualizzato il flusso Tipo di autorizzazione codice autorizzazione.

Diagramma che illustra il flusso del tipo di concessione del codice di autorizzazione.
In questo flusso OAuth:
  1. Un utente fa clic su un collegamento in un'applicazione client del server Web, richiedendo l'accesso alle risorse protette.

  2. L'applicazione client reindirizza il browser all'endpoint di autorizzazione oauth2/v1/authorize con una richiesta di codice di autorizzazione.

  3. Il server di autorizzazione restituisce un codice di autorizzazione all'applicazione client tramite un reindirizzamento del browser dopo che il proprietario della risorsa ha fornito il consenso.

  4. Il client scambia quindi il codice d'autorizzazione per un token d'accesso e spesso un token d'aggiornamento.

  5. Il server di autorizzazione restituisce il token di accesso all'applicazione client.

  6. L'applicazione client utilizza il token di accesso in una chiamata API per ottenere dati protetti.
    Nota

    Le credenziali del proprietario delle risorse non vengono mai esposte al client.
Funzione Disponibile
Richiede autenticazione client N
Richiede al client di conoscere le credenziali utente N
Interazione utente finale basata sul browser
Può utilizzare un provider di identità esterno per l'autenticazione
Il token di aggiornamento è consentito
Il token di accesso si trova nel contesto dell'utente finale

Vedere un esempio di Esempio di flusso di autorizzazione del tipo di concessione del codice di autorizzazione.

Esempio di flusso autorizzazione tipo autorizzazione codice autorizzazione

In questo esempio di flusso di autorizzazione viene descritta una richiesta di login a OpenID Connect mediante un codice di autorizzazione.

Questo flusso è un flusso OAuth a tre fasi, che si riferisce agli scenari in cui l'applicazione chiama le API del dominio di Identity per conto degli utenti finali e in cui a volte è richiesto il consenso dell'utente. Questo flusso mostra come configurare Federated Single Sign-On tra un dominio di Identity e un'applicazione personalizzata utilizzando OAuth 2.0 e OpenID Connect.

Quando si crea un'applicazione utilizzando il tipo di privilegio Codice autorizzazione nella console del dominio di Identity, effettuare le operazioni riportate di seguito.

  • Specificare Applicazione sicura come tipo di applicazione.

  • Selezionare Codice autorizzazione come tipo di privilegio.

  • Specificare l'URI di reindirizzamento, dove vengono inviate le risposte alle richieste di autenticazione.

  • Facoltativamente, selezionare il tipo di privilegio Aggiorna token per restituire un token di aggiornamento con il token di accesso.

Per ulteriori informazioni sul tipo di privilegio Codice autorizzazione e su un diagramma del flusso di autorizzazione, vedere Tipo di privilegio Codice autorizzazione.

Flusso autorizzazione

  1. Un utente fa clic su un collegamento nell'applicazione client del server Web (Preventivi cliente), richiedendo l'accesso alle risorse protette.

  2. L'app Customer Quotes reindirizza il browser all'endpoint di autorizzazione del dominio di Identity (oauth2/v1/authorize) con una richiesta di codice di autorizzazione.

    L'URL della richiesta contiene parametri di query che indicano il tipo di accesso richiesto.
    Nota

    Un valore nonce è una stringa casuale crittograficamente forte utilizzata per impedire che le risposte intercettate vengano riutilizzate.

    Richiesta di esempio: Client riservato/di fiducia

    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

    Richiesta di esempio: Client riservato/di fiducia che include il token di aggiornamento nella richiesta

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid%20<Resource
    Server Scope>%20offline_access&nonce=<nonce-value>&state=1234

    Richiesta di esempio: Client pubblico

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234

    Richiesta di esempio con PKCE

    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&code_challenge=<code-challenge>&code_challenge_method=<plain|S256>'
  3. Il dominio di Identity riceve la richiesta e identifica che l'app Customer Quotes (identificata dal suo client_id) sta richiedendo un codice di autorizzazione per ottenere ulteriori informazioni sul proprietario della risorsa (ambito openid).

  4. Se l'utente non è già connesso, IAM richiede all'utente di eseguire l'autenticazione. IAM controlla le credenziali dell'utente.

  5. Se il login riesce, IAM reindirizza il browser all'applicazione Preventivi cliente con un codice di autorizzazione.
    Nota

    Se l'utente non esegue l'autenticazione, viene restituito un errore anziché il codice di autorizzazione.
  6. L'applicazione Preventivi cliente estrae il codice di autorizzazione e richiede a un dominio di Identity di scambiare il codice di autorizzazione per un token di accesso.

    Esempio di richiesta: client riservato/affidabile

       curl -i 
       -H 'Authorization: Basic <base64-clientid-secret>' 
       -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>'

    Esempio di richiesta: client pubblico

       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>&redirect_uri=<client-redirect-uri>&client_id=<client-id>'

    Richiesta di esempio con PKCE

       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-cod>e&redirect_uri=<client-redirect-uri>&client_id=<client-id>&code_verifier=<code-verifier>'

    Richiesta di esempio con mTLS

    Per informazioni su come ottenere secureDomainURL, vedere Tipi di privilegio di accesso.

    curl -v \
    --cert cert.crt \
    --key key.key \
    --cacert ca.crt \
    --location '<secureDomainURL>/oauth2/v1/token' \
    --header 'Authorization: Basic <base64Encoded clientid:secret>'
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id=<client-id>' \
    --data-urlencode 'scope=urn:opc:idm:_myscopes_'
  7. IAM convalida la concessione e i dati utente associati al codice (client_id, client_secret e il codice di autorizzazione).

  8. Vengono restituiti un token di accesso e un token di identità. Il token di accesso contiene informazioni sugli ambiti che l'applicazione Preventivi cliente può richiedere per conto dell'utente. L'applicazione può utilizzare questo token durante la richiesta di API per conto dell'utente.

    Il token di identità viene recuperato solo quando si richiede l'ambito openid. Questo token contiene informazioni di identificazione sull'utente ed è utilizzato per l'autenticazione federata.

  9. L'applicazione Preventivi cliente elabora id_token e quindi estrae le informazioni dell'utente restituite da IAM.

  10. Preventivi cliente visualizza la home page che contiene informazioni sull'utente.