La spécification JWT décrit uniquement la charge utile et la façon dont elle est envoyée, mais laisse le protocole d'authentification ouvert, ce qui permet la flexibilité, mais malheureusement, la flexibilité peut conduire à des antipatterns et à une mauvaise conception.
Je recherche un modèle d'entreprise bien pensé et testé pour l'authentification JWT, que je pourrais utiliser ou adapter, mais je n'ai pas réussi à trouver quelque chose de complet.
Ce à quoi je pensais c'est:
- lorsqu'aucun en-tête d'autorisation n'est satisfait, ou si le jeton JWT n'est pas valide ou a expiré, envoyez HTTP 401
- pour vous authentifier, utilisez / connectez-vous au canal REST, envoyez le nom d'utilisateur et le mot de passe comme objet JSON
- afin de garder le jeton en vie, utilisez le canal REST / keepalive, appelez-le toutes les N (5) minutes, recevez un nouveau jeton JWT et remplacez celui existant après chaque appel (le jeton expire après M (15) minutes)
Cependant, ce qui me dérange, c'est la nécessité de ce canal / keepalive. D'un autre côté, cela m'oblige à empêcher l'expiration de l'authentification, même si l'utilisateur est absent (la décision, si nous voulons que keepalive ne soit pas encore satisfaite) et bien sûr, ce sont des appels supplémentaires et une complication supplémentaire au protocole. Ce qui serait intéressant, c'est que le serveur prolonge automatiquement le jeton. Dans un environnement basé sur une session, cela se produit en réinitialisant l'horodatage, ici, cependant, le serveur devrait envoyer un nouveau jeton, peut-être pas à chaque fois, mais une fois que le jeton va expirer dans R (disons, 10) minutes. Mais le placer dans le corps de la réponse signifierait modifier le protocole de réponse JSON (par conséquent, la solution est invasive et non transparente), et mettre un en-tête HTTP supplémentaire que le client pourrait traiter ne pouvait pas nécessairement être un bon modèle. JE'
Existe-t-il des modèles d'entreprise prêts à répondre à mes points ouverts? Mon projet de protocole est-il une idée fiable? Je préfère utiliser quelque chose de prêt que de concevoir à partir de zéro.