Tipo di concessione codice dispositivo
Utilizzare questo tipo di concessione quando un client viene eseguito su dispositivi che non dispongono di un metodo di immissione dati semplice (ad esempio, console di gioco, lettori multimediali in streaming e fotogrammi digitali) e il client non è in grado di ricevere richieste in entrata dal server di autorizzazione.
Ad esempio, un cliente acquista un Roku, una cornice digitale o una console di gioco. Il cliente ha bisogno di un token di accesso per recuperare filmati, immagini o giochi dal cloud. Invece di interagire con il lettore multimediale in streaming dell'utente (come un Roku) o una cornice digitale, il client indica all'utente di utilizzare un altro computer o dispositivo (un computer desktop, uno smartphone o un tablet) e di connettersi al server di autorizzazione per approvare la richiesta di accesso. Poiché il client non può ricevere richieste in entrata, esegue ripetutamente il polling del server di autorizzazione finché l'utente non completa il processo di approvazione.
Nel diagramma riportato di seguito viene visualizzato il flusso Tipo di concessione codice dispositivo.

In questo flusso OAuth:
Questo flusso di dispositivi non utilizza il segreto client per ottenere il codice dispositivo e il codice utente. Il segreto client viene utilizzato (se assegnato al client) per ottenere il token di accesso.
-
Un client dispositivo effettua una richiesta non autenticata a un endpoint
/device
del dominio di Identity. Il dispositivo riceve un codice dispositivo, un codice utente e un URI di verifica.Il client dispositivo visualizza il codice utente
(user_code)
per l'utente e fornisce l'URL(verification-uri)
in cui l'utente deve andare per immettere il codice utente (non mostrato nel diagramma). -
Il client del dispositivo non sa se l'utente è autorizzato. Il client dispositivo richiede ripetutamente il token di accesso (a
oauth2/v1/token)
in background fino a quando l'utente non immette il codice utente nella pagina di verifica. -
L'utente accede alla pagina di verifica, accede e quindi immette il codice utente.
-
Dopo che l'utente ha immesso il codice utente e autorizzato l'accesso, un token di accesso viene emesso dal server OAuth e all'utente viene concesso l'accesso ai dati protetti tramite il dispositivo.
Funzione | Disponibili |
---|---|
Interazione con l'utente finale basata sul browser | Sì |
Può utilizzare un provider di identità esterno per l'autenticazione | Sì |
Il token di aggiornamento è consentito | Sì |
Vedere un esempio di Esempio di flusso di autorizzazione del tipo di concessione del codice dispositivo.
Esempio di flusso autorizzazione tipo di concessione codice dispositivo
Il tipo di concessione Codice dispositivo fornisce un flusso di concessione specifico in cui un client dispositivo viene eseguito su un dispositivo che non dispone di un metodo di immissione dati semplice (ad esempio, console di gioco, lettori multimediali in streaming e cornici di immagini digitali) e il client dispositivo non è in grado di ricevere richieste in entrata dal server di autorizzazione.
Per ottenere un token di accesso per accedere a risorse protette tramite un client dispositivo, invece di interagire direttamente con il client dispositivo, il client dispositivo indica all'utente di utilizzare un altro computer o dispositivo e di connettersi al server di autorizzazione per approvare la richiesta di accesso. Il client del dispositivo esegue ripetutamente il polling del server di autorizzazione finché l'utente non completa il processo di approvazione.
Quando si crea un'applicazione utilizzando il tipo di privilegio Codice dispositivo nella console del dominio di Identity, selezionare Codice dispositivo come tipo di privilegio.
Per ulteriori informazioni sul tipo di concessione Codice dispositivo e su un diagramma di flusso di autorizzazione, vedere Tipo di concessione Codice dispositivo.
Flusso autorizzazione
-
Un client dispositivo effettua una richiesta non autenticata all'endpoint
/oauth2/v1/device
.L'URL dell'evento contiene parametri di query che indicano il tipo di accesso richiesto:
Esempio di richiesta
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/device' -d 'response_type=device_code&scope=http://example.com/quotes&client_id=<client-id>'
-
La risposta contiene un codice dispositivo, un codice utente e un URI di verifica dall'applicazione client OAuth.
Esempio di risposta
{ "expires_in": 300, "device_code": "4d03f7bc-f7a5-4795-819a-5748c4801d35", "user_code": "SDFGHJKL", "verification_uri": "http://<domainURL>/ui/v1/device" }
-
Il dispositivo visualizza il codice utente
(user_code)
e fornisce l'URL(validation-uri)
in cui l'utente deve andare per immettere il codice utente. - L'applicazione client del dispositivo non sa se l'utente è autorizzato. Mentre l'utente autorizza (o nega) la richiesta del client, il client esegue ripetutamente il polling del server di autorizzazione all'endpoint del token
(oauth2/v1/token)
per scoprire se l'utente ha completato il passo di autorizzazione utente. Il client include il codice di verifica e il relativo identificativo client nella richiesta.Esempio di richiesta: client riservato
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' -H 'Authorization: Basic <base64 clientid:secret> --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'
Esempio di richiesta: Public Client
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_id=3e51760ceb1245b7b77d0b1ff280bb72&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'
Esempio di richiesta mediante un'asserzione client
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<clientAssertion>&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'
Esempio di richiesta mediante un'asserzione SAML
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Asaml2-bearer&client_assertion=<samlAssertion>&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'
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_'
- Dopo che l'utente ha immesso il codice utente e autorizzato l'accesso, il server di autorizzazione OAuth esegue l'autenticazione dell'utente e restituisce un token di accesso contenente tutti gli ambiti applicabili in base ai privilegi rappresentati dai ruoli applicazione concessi all'applicazione client richiedente.
- Il client del dispositivo richiedente utilizza il token di accesso in una chiamata API per ottenere dati protetti.