Par souci de simplicité, notre implémentation se concentrera uniquement sur l’authentification et l’autorisation. Comme vous le verrez dans les exemples, l’entrée de feuille de temps fournie à l’API sera codée en dur, et l’API ne la conservera pas. Elle se contentera simplement de renvoyer 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, vous devez faire pointer votre application vers son URL. Par exemple, si vous aviez une API capable de renvoyer des commandes ou 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, tandis que GET /orders pourrait récupérer l’ensemble de données d’une ou de plusieurs commandes.HTTP GET vers le point de terminaison /timesheets permettra à un utilisateur de récupérer ses feuilles de temps, et une requête HTTP POST vers le point de terminaison /timesheets lui permettra d’ajouter une nouvelle feuille de temps.
Voir l’implémentation 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 :
- Vérifier que le est bien formé
- Vérifier la signature
- Valider les revendications standard
JWT.io fournit une liste de bibliothèques capables d’effectuer l’essentiel du travail pour vous : analyser le JWT, vérifier la signature et les revendications.
Vérifier les autorisations de l’application
Déterminer l’identité de l’utilisateur
sub, qui identifie l’entité principale visée par la revendication. Dans le cas du flux d’octroi implicite, cette revendication contiendra l’identité de l’utilisateur, c’est-à-dire l’identifiant unique de l’utilisateur Auth0. Vous pouvez l’utiliser pour associer à un utilisateur particulier toute information stockée dans des systèmes externes.
Vous pouvez également utiliser une revendication personnalisée pour ajouter un autre attribut de l’utilisateur — comme son adresse de courriel — au Jeton d’accès et vous en servir pour identifier l’utilisateur de façon unique.
Consultez l’implémentation dans Node.js.
Implémenter la SPA
- clientID: La valeur de votre Auth0. Vous pouvez la récupérer dans les paramètres de votre application, dans le Auth0 Dashboard.
- domain: La valeur de votre Domaine Auth0. Vous pouvez la récupérer dans les paramètres de votre application, dans le Auth0 Dashboard.
- responseType: Indique le flux d’authentification à utiliser. Pour une SPA qui utilise le flux implicite, 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 aussi le renvoi d’un . - : La valeur de l’identifiant de votre API. Vous pouvez la récupérer dans les paramètres de votre API, dans le Auth0 Dashboard.
- redirectUri: L’URL vers laquelle Auth0 doit rediriger l’utilisateur une fois l’authentification terminée.
- scope: Les scopes qui déterminent les informations renvoyées dans l’ID Token et le jeton d’accès. Un scope de
openid profilerenverra toutes les informations du profil utilisateur dans l’ID Token. Vous devez aussi demander les scopes requis pour appeler l’API, dans ce cas les scopesread:timesheets create:timesheets. Cela garantira que le jeton d’accès contient ces scopes.
authorize() :
parseHash(), qui analyse un fragment de hash d’URL pour extraire le résultat d’une réponse d’authentification d’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 informations de profil utilisateur
- accessToken : un jeton d’accès pour l’API spécifiée par audience.
- expiresIn : une chaîne de caractères contenant la durée d’expiration (en secondes) du jeton d’accès.
Obtenir le profil utilisateur
Extraire les 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 l’ID Token à l’aide d’une bibliothèque (assurez-vous de le valider d’abord). Si vous avez besoin de renseignements supplémentaires sur l’utilisateur, envisagez d’utiliser notre Management API depuis votre serveur principal.
client.userInfo peut être appelée en lui passant le authResult.accessToken renvoyé afin de récupérer les informations du profil de l’utilisateur. Elle enverra une requête au point de terminaison /userinfo et renverra l’objet user, qui contient les informations de l’utilisateur, comme dans l’exemple ci-dessous :
callback passée lors de l’appel à la fonction userInfo :
Afficher des éléments d’interface conditionnellement selon le scope
scope de l’utilisateur, vous pouvez afficher ou masquer certains éléments d’interface. Pour déterminer le scope accordé à un utilisateur, vous devez stocker le scope initialement demandé pendant le processus d’autorisation. Lorsqu’un utilisateur est autorisé, le scope est é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 devez utiliser ceux de authResult.scope.
Consultez l’implémentation dans Angular 2.
Appeler l’API
Authorization à l’aide du schéma Bearer.
Voir l’implémentation dans Angular 2.
Renouveler le Jeton d’accès
7200 secondes (2 heures), mais elle peut être configurée 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, il faut 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 idéal, car vous ne voudrez peut-être pas rediriger l’utilisateur loin de sa tâche en cours pour qu’il termine de nouveau le flux d’authentification.
Dans ce genre de cas, vous pouvez utiliser l’authentification silencieuse. L’authentification silencieuse vous permet d’exécuter un flux d’authentification dans lequel Auth0 ne renvoie que des redirections, jamais une page de connexion. Cela exige toutefois que l’utilisateur soit déjà connecté au moyen de l’authentification unique (SSO).
Consultez l’implémentation dans Angular 2.