Je viens de lire cet article qui date de quelques années mais décrit une manière intelligente de sécuriser vos API REST. Essentiellement:
- Chaque client possède une paire de clés publique / privée unique
- Seuls le client et le serveur connaissent la clé privée; il n'est jamais envoyé sur le fil
- Avec chaque demande, le client prend plusieurs entrées (la demande entière elle-même, l'horodatage actuel et la clé privée) et les exécute via une fonction HMAC pour produire un hachage de la demande
- Le client envoie ensuite la requête normale (qui contient la clé publique) et le hachage au serveur
- Le serveur recherche la clé privée du client (sur la base de la clé publique fournie) et effectue une vérification d'horodatage (que je ne comprends pas) qui vérifie que la demande n'est pas victime d'une attaque de relecture
- Si tout va bien, le serveur utilise la clé privée et la même fonction HMAC pour générer son propre hachage de la demande
- Le serveur compare ensuite les deux hachages (celui envoyé par le client ainsi que celui qu'il a généré); s'ils correspondent, la demande est authentifiée et autorisée à continuer
Je suis ensuite tombé sur JWT , ce qui semble très similaire. Cependant, le premier article ne mentionne pas du tout JWT, et donc je me demande si JWT est différent de la solution d'authentification ci-dessus, et si oui, comment.