Je construis une API RESTful qui utilise des jetons JWT pour l'authentification des utilisateurs (émise par un login
point de terminaison et envoyée dans tous les en-têtes par la suite), et les jetons doivent être actualisés après un laps de temps fixe (invocation d'un renew
point de terminaison, qui renvoie un jeton renouvelé ).
Il est possible que la session API d'un utilisateur devienne invalide avant l'expiration du jeton.Par conséquent, tous mes points de terminaison commencent par vérifier que: 1) le jeton est toujours valide et 2) la session de l'utilisateur est toujours valide. Il n'y a aucun moyen d'invalider directement le jeton, car les clients le stockent localement.
Par conséquent, tous mes points de terminaison doivent signaler à mes clients deux conditions possibles: 1) qu'il est temps de renouveler le jeton ou 2) que la session est devenue invalide et qu'ils ne sont plus autorisés à accéder au système. Je peux penser à deux alternatives pour mes points d'extrémité pour signaler à leurs clients lorsqu'une des deux conditions se produit (supposons que les clients peuvent être adaptés à l'une ou l'autre option):
- Renvoyez un code http 401 (non autorisé) si la session est devenue invalide ou renvoyez un code 412 (la condition préalable a échoué) lorsque le jeton a expiré et qu'il est temps d'appeler le
renew
point de terminaison, qui renverra un code 200 (ok). - Renvoyez 401 pour signaler que la session n'est pas valide ou que le jeton a expiré. Dans ce cas, le client appellera immédiatement le
renew
point de terminaison, s'il renvoie 200, le jeton est actualisé, mais s'ilrenew
renvoie également 401, cela signifie que le client est hors du système.
Laquelle des deux alternatives ci-dessus recommanderiez-vous? Laquelle serait plus standard, plus simple à comprendre et / ou plus RESTful? Ou recommanderiez-vous une approche complètement différente? Voyez-vous des problèmes évidents ou des risques de sécurité avec l'une ou l'autre option? Points supplémentaires si votre réponse comprend des références externes qui soutiennent votre opinion.
MISE À JOUR
Les gars, veuillez vous concentrer sur la vraie question - laquelle des deux alternatives de code http pour signaler un renouvellement / invalidation de session est la meilleure? Cela ne me dérange pas que mon système utilise JWT et des sessions côté serveur, c'est une particularité de mon API pour des règles métier très spécifiques, et non la partie pour laquelle je demande de l'aide;)