Je suis le développement d'une API REST qui nécessite une authentification. Parce que lui-même l'authentification se fait par un externe webservice sur HTTP, j'ai pensé que nous permettrait de se passer de jetons pour éviter à plusieurs reprises d'appeler le service d'authentification. Ce qui m'amène parfaitement à ma première question:
Est-ce vraiment mieux que simplement exiger que les clients utilisent HTTP Basic Auth sur chaque demande de mise en cache et les appels vers le service d'authentification côté serveur?
Le Basic Auth solution a l'avantage de ne pas nécessiter une pleine aller-retour vers le serveur avant que les demandes pour le contenu peut commencer. Les jetons peuvent potentiellement être plus flexible dans le champ d'application (c'est à dire qu'à accorder des droits à des ressources particulières ou des actions), mais qui me semble plus approprié à la OAuth contexte de que mon plus simple de cas d'utilisation.
Actuellement, les jetons sont acquis comme ceci:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
L' 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, et pour empêcher les appels à partir de la réutilisation des verbatim.
Est-ce bien suffisant? Underkill? Overkill?
Avec un jeton dans la main, les clients peuvent acquérir des ressources:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Pour le plus simple appel possible, ce qui semble sorte de terriblement bavard. Compte tenu de la shared_secret
sera le vent se embarqués dans (au moins) une application iOS, dont je suppose qu'il peut être extraite, est-ce même d'offrir quelque chose au-delà d'un faux sentiment de sécurité?