Type d'octroi de code d'appareil

Utilisez ce type d'octroi lorsqu'un client s'exécute sur des périphériques qui n'ont pas de méthode de saisie de données facile (par exemple, consoles de jeu, lecteurs multimédia en continu et cadres d'images numériques), et que le client est incapable de recevoir des demandes entrantes du serveur d'autorisation.

Par exemple, un client achète un Roku, une image numérique ou une console de jeu. Le client a besoin d'un jeton d'accès pour extraire des films, des images ou des jeux du cloud. Au lieu d'interagir avec le lecteur multimédia en continu de l'utilisateur (tel qu'un Roku) ou un cadre d'image numérique, le client demande à l'utilisateur d'utiliser un autre ordinateur ou appareil (un ordinateur de bureau, un téléphone intelligent ou une tablette) et de se connecter au serveur d'autorisation pour approuver la demande d'accès. Le client ne pouvant pas recevoir de demandes entrantes, il interroge le serveur d'autorisation à plusieurs reprises jusqu'à ce que l'utilisateur termine le processus d'approbation.

Le diagramme suivant présente le flux Type d'octroi de code d'appareil.

Diagramme illustrant le flux Device Code Grant Type.

Dans ce flux OAuth :

Remarque

Ce flux d'appareil n'utilise pas la clé secrète client pour obtenir le code d'appareil et le code utilisateur. La clé secrète client est utilisée (si elle est affectée au client) lors de l'obtention du jeton d'accès.
  1. Un client de périphérique effectue une demande non authentifiée vers une adresse /device de domaine d'identité. Le périphérique reçoit un code de périphérique, un code utilisateur et un URI de vérification.

    Le client de périphérique affiche le code utilisateur (user_code) à l'utilisateur et fournit l'URL (verification-uri) à laquelle l'utilisateur doit accéder pour entrer le code utilisateur (non illustré dans le diagramme).

  2. Le client de périphérique ne sait pas si l'utilisateur est autorisé. Le client de périphérique demande le jeton d'accès à plusieurs reprises (à oauth2/v1/token) en arrière-plan jusqu'à ce que l'utilisateur saisisse le code utilisateur sur la page de vérification).

  3. L'utilisateur accède à la page de vérification, se connecte, puis saisit le code utilisateur.

  4. Une fois que l'utilisateur a entré le code utilisateur et autorisé l'accès, un jeton d'accès est émis par le serveur OAuth et l'utilisateur a accès aux données protégées via l'appareil.

Fonction Disponible
Interaction utilisateur via navigateur Oui
Peut utiliser un fournisseur d'identités externe pour l'authentification Oui
Le jeton d'actualisation est autorisé Oui

Reportez-vous à un exemple Exemple de flux d'autorisation de type d'octroi de code d'appareil.

Exemple de flux d'autorisation de type d'octroi de code d'appareil

Le type d'octroi Device Code fournit un flux d'octroi spécifique dans lequel un client de périphérique s'exécute sur un périphérique qui ne dispose pas d'une méthode de saisie de données facile (par exemple, consoles de jeu, lecteurs multimédia en continu et cadres d'images numériques), et le client de périphérique est incapable de recevoir des demandes entrantes du serveur d'autorisation.

Pour obtenir un jeton d'accès permettant d'accéder à des ressources protégées via un client de périphérique, au lieu d'interagir directement avec le client de périphérique, le client de périphérique demande à l'utilisateur d'utiliser un autre ordinateur ou périphérique et de se connecter au serveur d'autorisation pour approuver la demande d'accès. Le client de périphérique interroge le serveur d'autorisation à plusieurs reprises jusqu'à ce que l'utilisateur termine le processus d'approbation.

Lorsque vous créez une application à l'aide du type d'octroi Code d'appareil dans la console du domaine d'identité, sélectionnez le type d'octroi Code d'appareil.

Pour plus d'informations sur le type d'octroi de code d'appareil et un diagramme de flux d'autorisation, reportez-vous à Type d'octroi de code d'appareil.

Flux d'autorisation

  1. Un client de périphérique envoie une demande non authentifiée à l'adresse /oauth2/v1/device.

    L'URL de l'événement contient des paramètres de requête qui indiquent le type d'accès demandé :

    Exemple de demande

       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>'
  2. La réponse contient un code de périphérique, un code utilisateur et un URI de vérification provenant de l'application client OAuth.

    Exemple de réponse

    { 
    "expires_in": 300, 
    "device_code": "4d03f7bc-f7a5-4795-819a-5748c4801d35", 
    "user_code": "SDFGHJKL",
    "verification_uri": "http://<domainURL>/ui/v1/device" 
    }
  3. Le périphérique affiche le code utilisateur (user_code) et fournit l'URL (validation-uri) à laquelle l'utilisateur doit accéder pour entrer le code utilisateur.

  4. L'application client d'appareil ne sait pas si l'utilisateur est autorisé. Alors que l'utilisateur autorise (ou refuse) la demande du client, le client interroge à plusieurs reprises le serveur d'autorisation à l'adresse de jeton (oauth2/v1/token) pour savoir si l'utilisateur a terminé l'étape d'autorisation de l'utilisateur. Le client inclut le code de vérification et son identifiant client dans la demande.

    Exemple de demande : client confidentiel

       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'

    Exemple de demande : client public

       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'

    Exemple de demande à l'aide d'une assertion 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'

    Exemple de demande à l'aide d'une assertion 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'

    Exemple de demande avec mTLS

    Pour savoir comment obtenir le fichier secureDomainURL, reportez-vous à Types d'octroi d'accès.

    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_'
  5. Une fois que l'utilisateur a entré le code utilisateur et autorisé l'accès, le serveur d'autorisation OAuth authentifie l'utilisateur et renvoie un jeton d'accès qui contient toutes les portées applicables en fonction des privilèges représentés par les rôles d'application accordés à l'application client requérante.
  6. Le client de dispositif demandeur utilise le jeton d'accès dans un appel d'API pour obtenir des données protégées.