web-dev-qa-db-fra.com

Java Spring JWT avec des questions de flux de travail de jeton d'actualisation

J'ai des questions concernant un flux de travail de jeton d'actualisation API JWT utilisant Java Spring.

J'ai ceci jusqu'à présent:

  1. L'utilisateur se connecte à/users/login - en cas de succès, une réponse avec 2 en-têtes est renvoyée Authorization and Refresh. Qui contiennent 2 jetons - un avec une expiration courte de 30 minutes et un avec une expiration plus longue de 4 heures.
  2. Il peut ensuite accéder à tous les autres points de terminaison à l'aide de l'en-tête d'autorisation.
  3. Si à un moment donné l'accès à un point de terminaison son jeton est expiré, il reçoit une erreur (NON AUTORISÉ).
  4. Et doit faire une demande de/token/refresh avec le jeton d'actualisation qui lui a été donné.

Questions:

  • Je l'ai configuré pour que le jeton d'autorisation ait une revendication: type = auth et que le jeton d'actualisation ait une revendication: type = rafraîchir. Quelle est la meilleure façon de distinguer les deux jetons.
  • Quelle devrait être l'erreur à l'étape 3 (au lieu de non autorisée) pour la distinguer d'une demande sans jeton valide
  • / token/refresh ne demande pas actuellement d'authentification. Devrait-il?
  • Si le point de terminaison/token/refresh est un POST avec en-tête, POST avec paramètres ou un GET avec en-tête).
4
D.Tomov

Quelle est la meilleure façon de distinguer les deux jetons.

Le jeton d'actualisation ne doit pas du tout être un JWT. Je préfère simplement générer une chaîne alphanumérique aléatoire. Le jeton d'actualisation ne contient aucune information supplémentaire. Il nécessite une recherche dans la base de données pour confirmer la validité du jeton d'actualisation. Vous les distinguez par leur emplacement dans votre demande. Le jeton d'autorisation (jeton d'accès) doit apparaître dans un en-tête de votre choix.

Quelle devrait être l'erreur à l'étape 3 (au lieu de non autorisée) pour la distinguer d'une demande sans jeton valide

L'envoi 401 non autorisé est exactement la façon de le faire. 401 indique au client qu'il ne peut pas accéder à la ressource maintenant, mais qu'il peut entreprendre des actions pour qu'il puisse à nouveau accéder à la ressource (jeton de connexion/actualisation). 403 de l'autre côté dirait au client que la ressource ne lui appartient pas et qu'il devra demander des autorisations, par ex. en contactant un administrateur

/ token/refresh ne demande pas actuellement d'authentification. Devrait-il?

Non, aucune authentification n'est nécessaire.

Si le point de terminaison/token/refresh est un POST avec en-tête, POST avec paramètres ou un GET avec en-tête).

En règle générale, un point de terminaison GET doit être en lecture seule et ne muter aucune ressource. POST et les points de terminaison PUT sont destinés aux mutations. Dans ce cas, j'utiliserais un POST avec des paramètres et une URL dédiée, par exemple/token/refresh

6
ygor