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.
Un utente fa clic su un collegamento in un'applicazione client del server Web, richiedendo l'accesso alle risorse protette.
L'applicazione client reindirizza il browser all'endpoint di autorizzazione
oauth2/v1/authorizecon una richiesta di codice di autorizzazione.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.
Il client scambia quindi il codice d'autorizzazione per un token d'accesso e spesso un token d'aggiornamento.
Il server di autorizzazione restituisce il token di accesso all'applicazione client.
- 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 | Sì |
| Può utilizzare un provider di identità esterno per l'autenticazione | Sì |
| Il token di aggiornamento è consentito | Sì |
| Il token di accesso si trova nel contesto dell'utente finale | Sì |
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
-
Un utente fa clic su un collegamento nell'applicazione client del server Web (Preventivi cliente), richiedendo l'accesso alle risorse protette.
-
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=1234Richiesta 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=1234Richiesta 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=1234Richiesta 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>' -
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 (ambitoopenid). -
Se l'utente non è già connesso, IAM richiede all'utente di eseguire l'autenticazione. IAM controlla le credenziali dell'utente.
-
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. -
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_' -
IAM convalida la concessione e i dati utente associati al codice (
client_id, client_secrete il codice di autorizzazione). -
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. -
L'applicazione Preventivi cliente elabora
id_tokene quindi estrae le informazioni dell'utente restituite da IAM. -
Preventivi cliente visualizza la home page che contiene informazioni sull'utente.