Ce tutoriel vous aidera à appeler votre propre API à l’aide du Resource Owner Password Flow. Si vous souhaitez comprendre le fonctionnement de ce flux et pourquoi l’utiliser, consultez Resource Owner Password Flow.
Prérequis
Avant de commencer ce tutoriel :-
Enregistrez votre Application auprès d’Auth0.
- Sélectionnez Regular Web Apps comme Application Type.
- Ajoutez
{https://yourApp/callback}comme Allowed Callback URL. Ce champ ne peut pas rester indéfini, sinon un message d’erreur sera renvoyé. - Assurez-vous que les Grant Types de votre Application incluent Password. Pour savoir comment faire, consultez Mettre à jour les type d’octroi.
- Si vous voulez que votre Application puisse utiliser des jetons d’actualisation, assurez-vous que les Grant Types de l’Application incluent jeton d’actualisation. Pour savoir comment faire, consultez Mettre à jour les type d’octroi. Pour en savoir plus sur les jetons d’actualisation, consultez jetons d’actualisation.
-
Enregistrez votre API auprès d’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.
-
Configurez une connexion
- Assurez-vous que votre connexion peut authentifier les utilisateurs avec un nom d’utilisateur et un mot de passe (par exemple, les connexions de base de données, ou les connexions d’entreprise AD/LDAP, ADFS ou Azure Active Directory).
-
Mettez à jour ou désactivez les rules afin qu’elles n’affectent que des connexions précises. Si vous obtenez une erreur
access_denieden testant le Password Owner Resource Grant, cela peut être dû à une règle de contrôle d’accès.
Étapes
- Configurer le tenant:Définissez la connexion par défaut du tenant.
- Obtenir des jetons: Échangez votre code d’autorisation contre des jetons.
- Appeler l’API: Utilisez le jeton d’accès récupéré pour appeler votre API.
- Actualiser les jetons: Utilisez un jeton d’actualisation pour obtenir de nouveaux jetons lorsque les jetons existants expirent.
Configurer le tenant
Le Resource Owner Password Flow s’appuie sur une connexion capable d’authentifier les utilisateurs avec un nom d’utilisateur et un mot de passe. Vous devez donc définir la connexion par défaut du tenant.- Accédez à Auth0 Dashboard > Tenant Settings, puis faites défiler la page jusqu’au paramètre Default Directory.
- Entrez le nom de la connexion que vous souhaitez utiliser. Assurez-vous qu’elle permet d’authentifier les utilisateurs avec un nom d’utilisateur et un mot de passe.
Demander des jetons
Pour appeler votre API, vous devez d’abord obtenir les identifiants de l’utilisateur, généralement à l’aide d’un formulaire interactif. Une fois que votre application a ces identifiants, vous devez les échanger contre des jetons. Pour ce faire, vous devez envoyer une requêtePOST à l’URL du jeton.
Exemple de requête POST vers l’URL du jeton
Réponse
Si tout se passe bien, vous recevrez une réponseHTTP 200 avec un payload contenant les valeurs access_token, refresh_token, id_token, token_type et expires_in :
Flux Resource Owner Password et scopes standard
Comme le fait de fournir un mot de passe donne un accès complet, tout échange basé sur un mot de passe donne accès à tous les scopes. Par exemple, si vous n’incluez aucun scope d’API dans la requête, tous les scopes d’API seront inclus dans le jeton d’accès. De même, si vous incluez seulement le scope
openid dans la requête, tous les scopes OpenID Connect standard de openid seront renvoyés. Dans ces cas, le paramètre scope sera inclus dans la réponse et énumérera les scopes émis.Obtenir les informations de l’utilisateur sans jeton d’identité
Si vous avez besoin des informations de l’utilisateur, incluez la portée
openid dans votre requête. Si l’API utilise RS256 comme algorithme de signature, le jeton d’accès inclura /userinfo comme audience valide, ce qui signifie que vous pouvez l’utiliser pour appeler le point de terminaison UserInfo et récupérer les claims de l’utilisateur.Appeler l’API
Pour appeler votre API, l’application doit transmettre le récupéré comme jeton Bearer dans l’en-tête Authorization de votre requête HTTP.Jetons d’actualisation
Vous avez déjà reçu un jeton d’actualisation si vous suivez ce tutoriel et avez effectué les étapes suivantes :- configuré votre API pour autoriser l’accès hors ligne
- inclus le scope
offline_accesslorsque vous avez lancé la requête d’authentification au moyen du point de terminaison authorize.
POST au point de terminaison /oauth/token dans l’Authentication API, en utilisant grant_type=refresh_token.
Exemple de requête POST vers l’URL du jeton
Réponse
Si tout se passe bien, vous recevrez une réponseHTTP 200 avec une charge utile contenant un nouvel access_token, sa durée de validité en secondes (expires_in), les valeurs scope accordées et token_type.
Exemples de scénarios d’utilisation
Personnaliser les jetons
Vous pouvez utiliser Actions pour modifier les scopes renvoyés dans les jetons d’accès et/ou ajouter des claims aux jetons d’accès et aux . (Pour en savoir plus sur Actions, consultez Auth0 Actions.) Pour ce faire, ajoutez l’Action suivante, qui s’exécutera après l’authentification de l’utilisateur :Configurer la prise en charge des realms
Auth0 fournit un grant d’extension offrant une fonctionnalité semblable à celle du grant Resource Owner Password, mais qui vous permet de conserver des annuaires d’utilisateurs distincts (correspondant à des connexions distinctes) et de préciser lequel utiliser pendant le flux. Pour utiliser cette variation, vous devez :- Définir le paramètre de requête
grant_typesurhttp://auth0.com/oauth/grant-type/password-realm. - Envoyer un paramètre de requête supplémentaire nommé
realmet le définir sur le nom du realm auquel l’utilisateur appartient. Par exemple, si vous avez configuré une connexion de base de données pour des employés internes nomméeemployeeset que votre utilisateur en fait partie, définissezrealmsuremployees.
Connexions utilisées comme realms
Toute connexion qui prend en charge l’authentification active peut être configurée comme un realm, y compris les connexions de base de données, les connexions sans mot de passe, ainsi que les connexions d’entreprise AD/LDAP, ADFS et Azure Active Directory.