Je crée 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 expirer le jeton d'accès aussi souvent que je le souhaite.
- À quoi ressemble un jeton d'actualisation? Est-ce une chaîne aléatoire? Cette chaîne est-elle chiffrée? Est-ce un autre JWT?
- Le jeton d'actualisation serait stocké dans la base de données sur le modèle utilisateur pour l'accès, n'est-ce pas? Il semble qu'il devrait être crypté dans ce cas
- Vais-je renvoyer le jeton d'actualisation après une connexion utilisateur, puis demander au client d'accéder à un itinéraire distinct pour récupérer un jeton d'accès?
security
authentication
oauth-2.0
jwt
jtmarmon
la source
la source
Réponses:
En supposant qu'il s'agit d'OAuth 2.0 puisqu'il s'agit de JWT et de jetons d'actualisation ...:
tout comme un jeton d'accès, en principe, un jeton d'actualisation peut être n'importe quoi, y compris toutes les options que vous décrivez; un JWT peut être utilisé lorsque le serveur d'autorisation veut être sans état ou veut appliquer une sorte de sémantique de «preuve de possession» au client qui le présente; notez qu'un jeton d'actualisation diffère d'un jeton d'accès en ce qu'il n'est pas présenté à un serveur de ressources mais uniquement au serveur d'autorisation qui l'a émis en premier lieu, de sorte que l'optimisation de validation autonome pour JWTs-as-access-tokens fait ne pas tenir pour les jetons d'actualisation
cela dépend de la sécurité / accès de la base de données; si la base de données est accessible par d'autres parties / serveurs / applications / utilisateurs, alors oui (mais votre kilométrage peut varier en fonction de l'endroit et de la manière dont vous stockez la clé de cryptage ...)
un serveur d'autorisation peut émettre à la fois des jetons d'accès et des jetons d'actualisation en même temps, en fonction de la concession utilisée par le client pour les obtenir; la spécification contient les détails et les options sur chacune des subventions standardisées
la source
Voici les étapes à suivre pour révoquer votre jeton d'accès JWT:
S'il vous plaît laissez-moi savoir si vous avez besoin de plus de détails, je peux également partager le code (Java + Spring boot).
Pour vos questions:
Q1: C'est un autre JWT avec moins de réclamations et un long délai d'expiration.
Q2: Ce ne sera pas dans une base de données. Le backend ne sera stocké nulle part. Ils décrypteront simplement le jeton avec une clé privée / publique et le valideront également avec son heure d'expiration.
Q3: oui, correct
la source
localStorage
et lerefreshToken
devrait être stocké dans un fichierhttpOnly
. LerefreshToekn
peut être utilisé pour obtenir un nouveau JWT, il doit donc être manipulé avec plus de précaution.Basé sur cette implémentation avec Node.js de JWT avec un 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 il le ferait à l'intérieur du JWT.
2) Ils implémentent ceci dans un document séparé (tableau). Cela a du sens pour moi, car un utilisateur peut être connecté dans différentes applications clientes et il pourrait 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.
la source
iat
avec fenêtre) - réémettre un nouveau basé sur le précédentJWT
vous voulez avoir à l'refresh_token
intérieur? Si tel est le cas, OAuth RFC 6749 dit explicitement de ne pas envoyerrefresh_token
au serveur de ressources (et leJWT
est envoyé aux serveurs de ressources): tools.ietf.org/html/rfc6749#section-1.5