Je développe une API REST qui nécessite une authentification. Étant donné que l'authentification elle-même se produit via un service Web externe sur HTTP, j'ai pensé que nous distribuerions des jetons pour éviter d'appeler à plusieurs reprises le service d'authentification. Ce qui m'amène à ma première question:
Est-ce vraiment mieux que d'exiger simplement que les clients utilisent l'authentification de base HTTP à chaque demande et la mise en cache des appels côté serveur du service d'authentification?
La solution Basic Auth a l'avantage de ne pas nécessiter un aller-retour complet vers le serveur avant que les demandes de contenu puissent commencer. Les jetons peuvent potentiellement avoir une portée plus flexible (c'est-à-dire n'accorder des droits qu'à des ressources ou des actions particulières), mais cela semble plus approprié au contexte OAuth que mon cas d'utilisation plus simple.
Actuellement, les jetons sont acquis comme ceci:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
Les api_key
, timestamp
et verifier
sont requis par toutes les demandes. Le "vérificateur" est renvoyé par:
sha1(timestamp + api_key + shared_secret)
Mon intention est de n'autoriser que les appels provenant de parties connues et d'éviter que les appels ne soient réutilisés textuellement.
Est-ce suffisant? Underkill? Overkill?
Avec un jeton en main, les clients peuvent acquérir des ressources:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Pour l'appel le plus simple possible, cela semble horriblement verbeux. Étant donné que la shared_secret
volonté finira par être intégrée (au minimum) dans une application iOS, à partir de laquelle je suppose qu'elle peut être extraite, est-ce même offrir quelque chose au-delà d'un faux sentiment de sécurité?