Ce tutoriel vous aidera à appeler votre propre API depuis un appareil aux capacités de saisie limitées à l’aide du flux d’autorisation d’appareil. Si vous voulez comprendre comment ce flux fonctionne et pourquoi vous devriez l’utiliser, consultez flux d’autorisation d’appareil.
- Authentication API : poursuivez votre lecture pour découvrir comment appeler notre API directement. Pour une expérience interactive, consultez Device Flow Playground.
Prérequis
- Vérifiez les limites (ci-dessous) pour vous assurer que le flux d’autorisation de l’appareil convient à votre implémentation.
-
Enregistrez l’application dans Auth0.
- Sélectionnez Native comme Application Type.
- Au besoin, définissez Allowed Web Origins. Vous pouvez l’utiliser pour autoriser localhost comme origine en développement local, ou pour définir une origine autorisée pour un logiciel de téléviseur particulier dont l’architecture est soumise à CORS (p. ex., HTML5 + JS). La plupart des applications n’utiliseront pas ce paramètre.
- Assurez-vous que l’option OIDC Conformant est activée. Ce paramètre se trouve dans l’Auth0 Dashboard, sous Applications > Application > Advanced Settings > OAuth.
- Assurez-vous que les Grant Types de l’application incluent Device Code. Pour savoir comment faire, consultez Update Grant Types.
- Si vous voulez que votre application puisse utiliser des jetons d’actualisation, assurez-vous que les Grant Types de l’application incluent Refresh Token. Pour savoir comment faire, consultez Update Grant Types. Pour en savoir plus sur les jetons d’actualisation, consultez Refresh Tokens.
- Configurez et activez au moins une connexion pour l’application : connexions de base de données, connexions sociales
-
Enregistrez votre API dans Auth0
- Si vous voulez que votre API reçoive des jetons d’actualisation pour pouvoir obtenir de nouveaux jetons lorsque les précédents expirent, activez Allow Offline Access. Pour en savoir plus sur les jetons d’actualisation, consultez Refresh Tokens.
- Configurez les paramètres du code utilisateur de l’appareil afin de définir le jeu de caractères, le format et la longueur de votre code utilisateur généré aléatoirement.
Étapes
- Demander un code d’appareil (flux d’appareil) : Demandez un code d’appareil que l’utilisateur pourra utiliser pour autoriser l’appareil.
- Demander l’activation de l’appareil (flux d’appareil) : Demandez à l’utilisateur d’autoriser l’appareil à l’aide de son ordinateur portable ou de son téléphone intelligent.
- Demander des jetons (flux d’appareil) : Interrogez le point de terminaison de jeton pour demander un jeton.
- Autoriser l’utilisateur (flux de navigateur) : L’utilisateur autorise l’appareil afin que celui-ci puisse recevoir des jetons.
- Recevoir des jetons (flux d’appareil) : Une fois que l’utilisateur a autorisé l’appareil, recevez les jetons.
- Appeler l’API (flux d’appareil) : Utilisez le Jeton d’accès récupéré pour appeler votre API.
- Actualiser les jetons (flux d’appareil) : Utilisez un Jeton d’actualisation pour demander de nouveaux jetons lorsque les jetons existants expirent.
Demander un code d’appareil
Exemple de requête POST vers l’URL du code d’appareil
Paramètres du code d’appareil
- devez inclure un paramètre
- pouvez inclure des scopes supplémentaires pris en charge par l’API cible
Si votre application veut un Jeton d’accès uniquement pour récupérer des renseignements sur l’utilisateur authentifié, aucun paramètre audience n’est nécessaire.
| Nom du paramètre | Description |
|---|---|
client_id | L’ID client de votre application. Vous pouvez trouver cette valeur dans vos paramètres de l’application. |
scope | Les scopes pour lesquels vous voulez demander une autorisation. Ils doivent être séparés par un espace. Vous pouvez demander n’importe lequel des scopes OIDC standard concernant les utilisateurs, comme profile et email, des revendications personnalisées conformes à un format avec espace de noms, ou n’importe quels scopes pris en charge par l’API cible (p. ex., read:contacts). Incluez openid pour obtenir un ID Token ou pour pouvoir utiliser le point de terminaison /userinfo afin de récupérer les renseignements de profil de l’utilisateur. Incluez offline_access pour obtenir un Jeton d’actualisation (assurez-vous que le champ Allow Offline Access est activé dans les paramètres de l’API). Notez que cette valeur doit être encodée dans l’URL. |
audience | L’identificateur unique de l’API à laquelle votre application veut accéder. Utilisez la valeur Identifier dans l’onglet Settings de l’API que vous avez créée dans les prérequis de ce tutoriel. Notez que cette valeur doit être encodée dans l’URL. |
Réponse du code d’appareil
HTTP 200 avec un payload contenant les valeurs device_code, user_code, verification_uri, expires_in, interval et verification_uri_complete :
device_codeest le code unique de l’appareil. Lorsque l’utilisateur accède àverification_uridans le navigateur de son appareil, ce code est associé à sa session.user_codecontient le code à saisir à l’adresseverification_uripour autoriser l’appareil.verification_uricontient l’URL que l’utilisateur doit ouvrir pour autoriser l’appareil.verification_uri_completecontient l’URL complète que l’utilisateur doit ouvrir pour autoriser l’appareil. Cela permet à votre application d’inclure leuser_codedans l’URL, si vous le souhaitez.expires_inindique la durée de validité (en secondes) dudevice_codeet duuser_code.intervalindique l’intervalle (en secondes) auquel l’application doit interroger l’URL du jeton pour demander un jeton.
Vous pouvez configurer le jeu de caractères, le format et la longueur de votre code utilisateur généré aléatoirement dans Paramètres du locataire.Pour prévenir les attaques par force brute, nous appliquons les limites suivantes à
user_code :Longueur minimale :- Lettres BASE20 : 8 caractères
- Chiffres : 9 caractères
- 20 caractères (y compris les traits d’union et les espaces, qui peuvent être ajoutés comme séparateurs pour faciliter la lecture)
- 15 minutes
Demander l’activation de l’appareil
device_code et un user_code, vous devez demander à l’utilisateur de se rendre à l’adresse verification_uri sur son ordinateur portable ou son téléphone intelligent et d’entrer le user_code :

device_code n’est pas destiné à l’utilisateur et ne doit pas être affiché pendant l’interaction afin d’éviter toute confusion.
Si vous créez une CLI, vous pouvez ignorer cette étape et ouvrir immédiatement le navigateur avec
verification_uri_complete.Demander des jetons
interval) extrait à l’étape précédente, vous devrez envoyer une requête POST à l’URL du jeton avec le device_code.
Pour éviter les erreurs dues à la latence réseau, commencez à compter chaque intervalle après avoir reçu la réponse à la requête de scrutation précédente.
Exemple de requête POST pour obtenir un jeton à l’URL du jeton
Paramètres de la requête de jeton
| Nom du paramètre | Description |
|---|---|
grant_type | Définissez cette valeur à “urn:ietf:params:oauth:grant-type:device_code”. Il s’agit d’un type d’octroi d’extension (tel que défini à la section 4.5 de la RFC6749). Notez que cette valeur doit être encodée URL. |
device_code | Le device_code récupéré à l’étape précédente de ce tutoriel. |
client_id | L’ID client de votre application. Vous trouverez cette valeur dans les paramètres de l’application. |
Réponses liées au jeton
HTTP 4xx :
Vous verrez cette erreur en attendant que l’utilisateur passe à l’action. Continuez la scrutation à l’aide de l’intervalle suggéré récupéré à l’étape précédente de ce tutoriel.
Ralentissez
Jeton expiré
device_code a expiré. Votre application doit informer l’utilisateur que le flux a expiré et lui demander de relancer le flux.
Accès refusé
- l’utilisateur a refusé d’autoriser l’appareil
- le a rejeté la transaction
- une Rule configurée a refusé l’accès (Pour en savoir plus, consultez Auth0 Rules.)


- L’authentification de l’utilisateur;
- La redirection de l’utilisateur vers un pour gérer l’authentification;
- La vérification de sessions d’ actives;
- L’obtention du consentement de l’utilisateur pour l’appareil, sauf si ce consentement a déjà été accordé.


Recevoir les jetons
HTTP 200 avec un payload contenant access_token, refresh_token (facultatif), id_token (facultatif), token_type et expires_in :
/userinfo de l’Auth0 Authentication API ou une autre API. (Pour en savoir plus sur les jetons d’accès, consultez Jetons d’accès.) Vous ne pourrez utiliser le jeton d’accès pour appeler /userinfo que si vous avez inclus le scope openid. Si vous appelez votre propre API, la première chose à faire pour celle-ci sera de vérifier le jeton d’accès.
contiennent des informations sur l’utilisateur qu’il faut décoder et extraire. (Pour en savoir plus sur les ID Tokens, consultez ID Tokens.) Le id_token ne sera présent dans la réponse que si vous avez inclus le scope openid.
servent à obtenir un nouveau jeton d’accès ou un ID Token après l’expiration du précédent. (Pour en savoir plus sur les jetons d’actualisation, consultez Jetons d’actualisation.) Le refresh_token ne sera présent dans la réponse que si vous avez inclus le scope offline_access et activé Allow Offline Access pour votre API dans l’Auth0 Dashboard.
Appelez votre API
Jetons d’actualisation
- configuré votre API pour autoriser l’accès hors ligne
- inclus le scope
offline_accesslorsque vous avez lancé la demande d’authentification au moyen du point de terminaison authorize
POST vers le point de terminaison /oauth/token dans l’Authentication API, en utilisant grant_type=refresh_token.
Exemple de requête POST avec un jeton d’actualisation à l’URL du jeton
Paramètres de la requête de jeton d’actualisation
| Nom du paramètre | Description |
|---|---|
grant_type | Définissez cette valeur sur “refresh_token”. |
client_id | L’ID client de votre application. Vous trouverez cette valeur dans les paramètres de l’application. |
client_secret | Le Secret client de votre application. Vous trouverez cette valeur dans les paramètres de l’application. |
refresh_token | Le jeton d’actualisation à utiliser. |
scope | (Facultatif) Une liste de scopes demandés, séparés par des espaces. S’il n’est pas transmis, les scopes d’origine seront utilisés ; sinon, vous pouvez demander un ensemble réduit de scopes. Notez que cette valeur doit être encodée au format URL. |
Réponse du jeton d’actualisation
HTTP 200 avec un payload contenant un nouvel access_token, un id_token (facultatif), la durée de validité du jeton en secondes (expires_in), les valeurs de scope accordées et le token_type :
Exemples d’utilisation
protocol de l’objet context :
Exemples d’implémentation
- Bac à sable du flux d’autorisation d’appareil
- AppleTV (Swift): Application simple qui montre comment utiliser Auth0 avec le flux d’autorisation d’appareil sur une Apple TV.
- CLI (Node.js): Exemple d’implémentation d’une CLI qui utilise le flux d’autorisation d’appareil au lieu du flux de code d’autorisation. La principale différence, c’est que votre CLI n’a pas besoin d’héberger un serveur web ni d’écouter sur un port.
Dépannage
Codes d’erreur
| Code | Nom | Description |
|---|---|---|
fdeaz | Échec de la demande d’autorisation de l’appareil | |
fdeac | Échec de l’activation de l’appareil | |
fdecc | L’utilisateur a annulé la confirmation de l’appareil | |
fede | Échec de l’échange | Code d’appareil contre jeton d’accès |
sede | Échange réussi | Code d’appareil contre jeton d’accès |
Limitations
- Prendre en charge l’indication du nom du serveur (SNI) lorsque des Domaines personnalisés sont utilisés
- Avoir un type d’application Auth0 défini sur Native
- Avoir la méthode d’authentification du point de terminaison de jeton définie sur None
- Être conformes à OIDC
- Ne pas être créés au moyen de l’Enregistrement dynamique des applications
- Les connexions sociales utilisant des clés de développeur Auth0, à moins que vous n’utilisiez l’expérience Universal Login
- L’accès aux paramètres de chaîne de requête à partir de la page de connexion hébergée, de Rules ou d’Actions
- La liaison de comptes d’utilisateur