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 sera codée en dur et l’API n’enregistrera pas cette entrée. Elle renverra simplement une partie des informations.
Définir les points de terminaison de l’API
Qu’est-ce qu’un point de terminaison d’API ?
Un point de terminaison d’API est une URL unique qui représente un objet. Pour interagir avec cet objet, votre application doit être dirigée 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 au moyen de différentes méthodes HTTP ; par exemple, POST /orders pourrait créer une nouvelle commande ou GET /orders pourrait récupérer le jeu de données d’une ou de plusieurs commandes.HTTP GET au point de terminaison /timesheets permettra à un utilisateur de récupérer ses feuilles de temps, et une requête HTTP POST au point de terminaison /timesheets permettra à un utilisateur d’ajouter une nouvelle entrée de feuille de temps.
Voir la mise en œuvre en Node.js.
Sécuriser les points de terminaison
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.
Vérifier les permissions de l’application
Déterminer l’identité de l’utilisateur
sub, qui identifie le principal auquel la claim se rapporte. Dans le cas du flow 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 des informations dans des systèmes externes à un utilisateur précis.
Vous pouvez aussi utiliser une custom claim pour ajouter un autre attribut de l’utilisateur — comme son adresse courriel — à l’access token et vous en servir pour identifier l’utilisateur de façon unique.
Consultez la mise en œuvre dans Node.js.
Mettre en place la SPA
- clientID : La valeur de votre Auth0. Vous pouvez la récupérer dans les Settings de votre Application du Dashboard.
- domain : La valeur de votre domaine Auth0. Vous pouvez la récupérer dans les Settings de votre Application du Dashboard.
- responseType : Indique le flux d’authentification à utiliser. Pour une SPA qui utilise l’Implicit Flow, cette valeur doit être définie sur
token id_token. La partietokendéclenche le renvoi d’un jeton d’accès dans le fragment d’URL, tandis que la partieid_tokendéclenche également le renvoi d’un . - : La valeur de votre identifiant d’API. Vous pouvez la récupérer dans les Settings de votre API du Dashboard.
- redirectUri : L’URL vers laquelle Auth0 doit rediriger l’utilisateur après son authentification.
- scope : Les scopes qui déterminent les renseignements à renvoyer dans le ID Token et le jeton d’accès. Un scope de
openid profilerenverra tous les renseignements du profil utilisateur dans le ID Token. Vous devez aussi demander les scopes requis pour appeler l’API, dans ce cas-ci les scopesread:timesheets create:timesheets. Cela garantira que le jeton d’accès possède ces scopes.
authorize() :
parseHash() , qui analyse un fragment de hachage d’URL afin d’extraire le résultat d’une réponse d’authentification Auth0.
Le contenu de l’objet authResult renvoyé par parseHash dépend des paramètres d’authentification utilisés. Il peut inclure les éléments suivants :
- idToken : un JWT ID Token contenant des renseignements du profil utilisateur
- accessToken : un jeton d’accès pour l’API, spécifié par l’audience.
- expiresIn : une chaîne contenant la durée d’expiration (en secondes) du jeton d’accès.
Obtenir le profil de l’utilisateur
Extraire des informations du jeton
Cette section montre comment récupérer les informations de l’utilisateur à l’aide du jeton d’accès et du point de terminaison /userinfo. Pour éviter cet appel d’API, vous pouvez simplement décoder le ID Token à l’aide d’une bibliothèque (assurez-vous de d’abord le valider). Si vous avez besoin de renseignements supplémentaires sur l’utilisateur, envisagez d’utiliser notre Management API à partir de votre backend.
client.userInfo peut être appelée en lui passant le authResult.accessToken retourné afin de récupérer les informations du profil de l’utilisateur. Elle enverra une requête au point de terminaison /userinfo et retournera l’objet user, qui contient les informations de l’utilisateur, comme dans l’exemple ci-dessous :
userInfo :
Afficher conditionnellement des éléments de l’interface utilisateur en fonction du scope
scope de l’utilisateur, vous pourriez souhaiter afficher ou masquer certains éléments de l’interface utilisateur. Pour déterminer le scope accordé à un utilisateur, vous devrez stocker le scope initialement demandé lors du processus d’autorisation. Une fois l’utilisateur autorisé, le scope sera également renvoyé dans authResult.
Si le scope dans authResult est vide, cela signifie que tous les scopes demandés ont été accordés. Si le scope dans authResult n’est pas vide, cela signifie qu’un ensemble différent de scopes a été accordé, et vous devriez utiliser ceux de authResult.scope.
Voir la mise en œuvre dans Angular 2.
Faire une requête à l’API
Authorization à l’aide du schéma Bearer.
Consultez la mise en œuvre dans Angular 2.
Renouveler le jeton d’accès
7200 secondes (2 heures), mais vous pouvez la définir pour chaque API.
Une fois expiré, un jeton d’accès ne peut plus être utilisé pour accéder à une API. Pour y accéder de nouveau, vous devez obtenir un nouveau jeton d’accès.
Pour obtenir un nouveau jeton d’accès, vous pouvez répéter le flux d’authentification utilisé pour obtenir le jeton d’accès initial. Dans une SPA, ce n’est pas l’idéal, car vous ne voudrez peut-être pas rediriger l’utilisateur hors de sa tâche en cours pour qu’il recommence le flux d’authentification.
Dans ce type de situation, vous pouvez utiliser l’authentification silencieuse. L’authentification silencieuse vous permet d’exécuter un flux d’authentification dans lequel Auth0 répond uniquement par des redirections, jamais avec une page de connexion. Cela exige toutefois que l’utilisateur ait déjà ouvert une session au moyen de l’authentification unique (SSO).
Voir la mise en œuvre dans Angular 2.