web-dev-qa-db-fra.com

Flux de jetons d'actualisation JWT

Je construis une application mobile et j'utilise JWT pour l'authentification.

Il semble que la meilleure façon de procéder consiste à associer le jeton d'accès JWT à un jeton d'actualisation afin que je puisse l'exprimer aussi souvent que je le souhaite.

  1. À quoi ressemble un jeton d'actualisation? Est-ce une chaîne aléatoire? Cette chaîne est-elle cryptée? Est-ce un autre JWT?
  2. Le jeton d'actualisation serait stocké dans la base de données sur le modèle utilisateur pour l'accès, correct? Il semble que cela devrait être crypté dans ce cas
  3. Aurais-je renvoyé le jeton d'actualisation après la connexion d'un utilisateur, puis le client aurait accès à un itinéraire distinct pour récupérer un jeton d'accès?
79
jtmarmon

En supposant qu'il s'agisse de OAuth 2.0 puisqu'il s'agit de JWT et d'actualiser des jetons ...:

  1. tout comme un jeton d'accès, un jeton d'actualisation peut en principe être constitué de toutes les options que vous décrivez. un JWT peut être utilisé lorsque le serveur d'autorisations veut être sans état ou veut appliquer une sorte de sémantique de "preuve de possession" au client qui la présente; notez qu'un jeton d'actualisation diffère d'un jeton d'accès en ce sens qu'il n'est pas présenté à un serveur de ressources, mais uniquement au serveur d'autorisations qui l'a émis en premier lieu. ne pas tenir pour rafraîchir les jetons

  2. cela dépend de la sécurité/de l'accès de la base de données; si d'autres parties/serveurs/applications/utilisateurs ont accès à la base de données, alors oui (mais votre kilométrage peut varier en fonction du lieu et du mode de stockage de la clé de cryptage ...)

  3. un serveur d'autorisations peut émettre des jetons d'accès et des jetons d'actualisation simultanément, en fonction de la subvention utilisée par le client pour les obtenir; la spécification contient les détails et les options de chacune des subventions standardisées

25
Hans Z.

Basé dans ceci implémentation avec Node.js de JWT avec jeton d'actualisation :

1) Dans ce cas, ils utilisent un uid et ce n'est pas un JWT. Lorsqu'ils actualisent le jeton, ils envoient le jeton d'actualisation et l'utilisateur. Si vous l'implémentez en tant que JWT, vous n'avez pas besoin d'envoyer l'utilisateur, car ce serait à l'intérieur du JWT.

2) Ils implémentent cela dans un document séparé (tableau). Cela a du sens pour moi, car un utilisateur peut être connecté à différentes applications clientes et il peut avoir un jeton d'actualisation par application. Si l'utilisateur perd un appareil avec une application installée, le jeton d'actualisation de cet appareil peut être invalidé sans affecter les autres appareils connectés.

3) Dans cette implémentation, il répond à la méthode de connexion avec à la fois un jeton d'accès et un jeton d'actualisation. Cela me semble correct.

19
David

Vous trouverez ci-dessous les étapes à suivre pour révoquer votre jeton d'accès JWT:

1) Lorsque vous vous connectez, envoyez 2 jetons (jeton d'accès, jeton d'actualisation) en réponse au client.
2) Le délai d’expiration du jeton d’accès est moins long et le délai d’expiration plus long de Refresh.
3) Le client (frontal) stockera le jeton d'actualisation dans son stockage local et le jeton d'accès dans des cookies.
4) Le client utilisera un jeton d'accès pour appeler des apis. Mais quand il expire, choisissez le jeton d'actualisation à partir du stockage local et appelez l'API du serveur d'authentification pour obtenir le nouveau jeton.
5) Votre serveur d'authentification disposera d'une API qui acceptera le jeton d'actualisation, en vérifiera la validité et renverra un nouveau jeton d'accès.
6) Une fois le jeton d'actualisation expiré, l'utilisateur sera déconnecté.

Faites-moi savoir si vous avez besoin de plus de détails, je peux également partager le code (Java + Spring Boot).

Pour vos questions:
Que 1: C’est un autre JWT avec moins de demandes d’indemnisation déposées avec une longue période d’expiration.

Que 2: Ce ne sera pas dans la base de données. Le backend ne stockera nulle part. Ils vont simplement décrypter le jeton avec une clé privée/publique et le valider avec son heure d'expiration également.

Que3: oui, correct

15
Bhupinder Singh