Skip to main content
Dans cette section, nous verrons comment implémenter une API pour notre scénario.
Par souci de simplicité, nous limiterons notre mise en œuvre à l’authentification et à l’autorisation. Comme vous le verrez dans les exemples, l’entrée de feuille de temps fournie en entrée sera codée en dur, et l’API n’enregistrera pas cette entrée. Elle se contentera plutôt de renvoyer une partie des informations.

Définir les API points de terminaison

Nous devons d’abord définir les points de terminaison de notre API.

Qu’est-ce qu’un API point de terminaison ?

Un API point de terminaison est une URL unique qui représente un objet. Pour interagir avec cet objet, votre application doit pointer vers son URL. Par exemple, si vous aviez une API capable de renvoyer soit des commandes, soit des clients, vous pourriez configurer deux points de terminaison : /orders et /customers. Votre application interagirait avec ces points de terminaison à l’aide de différentes méthodes HTTP; par exemple, POST /orders pourrait créer une nouvelle commande, ou GET /orders pourrait récupérer l’ensemble de données d’une ou de plusieurs commandes.
Pour cette mise en œuvre, nous ne définirons que deux points de terminaison : un pour récupérer la liste de tous les timesheets d’un Employee, et un autre qui permettra à un Employee de créer une nouvelle timesheet entry. Une requête HTTP GET vers le point de terminaison /timesheets permettra à un utilisateur de récupérer ses timesheets, et une requête HTTP POST vers le point de terminaison /timesheets permettra à un utilisateur d’ajouter une nouvelle timesheet. Consultez la mise en œuvre dans Node.js

Sécuriser les points de terminaison

Lorsqu’une API reçoit une requête avec un porteur dans l’en-tête, la première chose à faire est de valider le jeton. Ce processus comprend une série d’étapes et, si l’une d’elles échoue, la requête doit être rejetée avec le message d’erreur Missing or invalid token à l’intention de l’application appelante. Les validations que l’API doit effectuer sont les suivantes :
  • Vérifier que le est bien formé
  • Vérifier la signature
  • Valider les claims standard
JWT.io fournit une liste de bibliothèques qui peuvent faire l’essentiel du travail pour vous : analyser le JWT, vérifier la signature et les claims.
Le processus de validation comprend aussi la vérification des permissions du client (scopes), mais nous y reviendrons séparément dans le paragraphe suivant de ce document. Pour en savoir plus sur la validation des jetons d’accès, consultez Valider les jetons d’accès. Consultez la mise en œuvre dans Node.js

Vérifier les permissions du client

À ce stade, nous avons vérifié que le JWT est valide. La dernière étape consiste à vérifier que le client dispose des permissions requises pour accéder aux ressources protégées. Pour ce faire, l’API doit vérifier les scopes du JWT décodé. Ce claim fait partie du payload, et il s’agit d’une liste de chaînes séparées par des espaces. Voir la mise en œuvre dans Node.js

Déterminer l’identité de l’utilisateur

Pour les deux endpoints (récupération de la liste des feuilles de temps et ajout d’une nouvelle feuille de temps), nous devrons déterminer l’identité de l’utilisateur. Pour récupérer la liste des feuilles de temps, cela permet de nous assurer que nous renvoyons uniquement les feuilles de temps qui appartiennent à l’utilisateur qui fait la requête; et pour ajouter une nouvelle feuille de temps, cela permet de nous assurer que la feuille de temps est associée à l’utilisateur qui fait la requête. L’une des claims standard d’un JWT est la claim sub, qui identifie le principal auquel la claim s’applique. Dans le cas du flux Implicit Grant, cette claim contiendra l’identité de l’utilisateur, c’est-à-dire l’identifiant unique de l’utilisateur Auth0. Vous pouvez vous en servir pour associer à un utilisateur particulier toute information stockée dans des systèmes externes. Vous pouvez également utiliser une custom claim pour ajouter un autre attribut de l’utilisateur — comme son adresse courriel — au jeton d’accès et vous en servir pour identifier l’utilisateur de façon unique. Consultez la mise en œuvre dans Node.js

Mettre en œuvre l’application mobile

Dans cette section, nous verrons comment mettre en œuvre une application mobile pour notre scénario. Voir la mise en œuvre sur Android.

Autoriser l’utilisateur

Pour autoriser l’utilisateur, nous mettrons en œuvre le flux de code d’autorisation avec clé de preuve pour l’échange de code (PKCE). L’application mobile doit d’abord rediriger l’utilisateur vers l’URL d’autorisation avec le code_challenge et la méthode utilisée pour le générer : La requête GET vers l’URL d’autorisation doit inclure les valeurs suivantes : Voir la mise en œuvre dans Android.

Obtenir les identifiants

Après avoir envoyé une requête à l’URL d’autorisation avec succès, vous devriez recevoir la réponse suivante : Ensuite, vous pouvez échanger l’authorization_code de la réponse contre un jeton d’accès qui peut être utilisé pour faire des requêtes à votre API. Effectuez une requête POST vers l’URL du jeton en incluant les données suivantes : La réponse de l’URL de jeton contiendra :
  • access_token: un jeton d’accès pour l’API, précisé par l’audience.
  • refresh_token: un Refresh Token ne sera présent que si vous avez inclus le scope offline_access ET activé Allow Offline Access pour votre API dans le Dashboard.
  • id_token: un JWT contenant des renseignements du profil utilisateur.
  • token_type: une chaîne indiquant le type de jeton; il s’agira toujours d’un jeton Bearer.
  • expires_in: le nombre de secondes avant l’expiration du jeton d’accès.
Vous devrez stocker les identifiants ci-dessus dans le stockage local afin de les utiliser pour appeler votre API et récupérer le profil utilisateur. Voir la mise en œuvre sur Android.

Récupérer le profil de l’utilisateur

Pour récupérer le profil de l’utilisateur, votre application mobile peut décoder le ID Token à l’aide de l’une des bibliothèques JWT. Pour ce faire, il faut vérifier la signature et vérifier les claims du token. Après avoir validé l’ID Token, vous pouvez accéder à son payload, qui contient les renseignements de l’utilisateur :
Consultez la mise en œuvre sur Android.

Afficher des éléments de l’interface utilisateur de façon conditionnelle selon le scope

Selon le scope de l’utilisateur, vous pourriez vouloir afficher ou masquer certains éléments de l’interface utilisateur. Pour déterminer le scope accordé à un utilisateur, vous devrez examiner le scope qui lui a été accordé au moment de son authentification. Il s’agira d’une chaîne contenant tous les scopes; vous devrez donc l’examiner pour vérifier si elle contient le scope requis et décider, en conséquence, s’il faut afficher un élément particulier de l’interface utilisateur. Voir la mise en œuvre sur Android

Appeler l’API

Pour accéder aux ressources sécurisées de votre API, le jeton d’accès de l’utilisateur authentifié doit être inclus dans les requêtes qui y sont envoyées. Pour ce faire, envoyez le jeton d’accès dans un en-tête Authorization en utilisant le schéma Bearer. Voir la mise en œuvre sur Android.

Actualiser le jeton

Les Refresh Tokens doivent être stockés de manière sécurisée par une application, puisqu’ils n’expirent pas et permettent à un utilisateur de rester authentifié pratiquement indéfiniment. Si des Refresh Tokens sont compromis ou si vous n’en avez plus besoin, vous pouvez les révoquer à l’aide de l’Authentication API.
Pour actualiser votre jeton d’accès, envoyez une requête POST au point de terminaison /oauth/token à l’aide du obtenu dans votre résultat d’autorisation. Un Refresh Token ne sera présent que si vous avez inclus le scope offline_access dans la requête d’autorisation précédente et activé Allow Offline Access pour votre API dans le Dashboard. Votre requête doit inclure : La réponse comprendra le nouveau jeton d’accès :
Voir la mise en œuvre sur Android.