Je crée actuellement un système d'authentification devant une API Web publique pour une application Web. Étant donné que chaque compte utilisateur possède une clé API et que chaque demande doit être authentifiée, j'ai deux alternatives:
En utilisant une authentification HTTP de base, comme le fait GitHub .
Les demandes doivent être envoyées à l'URL
http://api.example.com/resource/id
with basic authentication
username: token
password: the api key
Passer le jeton d'API en tant que paramètre de chaîne de requête.
Les demandes doivent être envoyées à l'URL
http://api.example.com/resource/id?token=api_key
Il y a aussi une troisième option qui passe le jeton dans l'URI, mais honnêtement, je n'aime pas cette solution.
Quelle solution adopteriez-vous et pourquoi?
Je pense que HTTP Basic Auth devrait être OK mais juste pour des besoins vraiment simples.
La solution complète (et finale) à mon humble avis consiste à implémenter un fournisseur OAuth. Ce n'est pas complexe, c'est un protocole simple et vous donne beaucoup de flexibilité. De plus, il semble que ce soit la tendance actuelle car de nombreux grands acteurs l'implémentent et il est pris en charge par de nombreuses bibliothèques.
Le meilleur pari pourrait être d'utiliser une clé API dans l'en-tête (par exemple, `` Autorisation: jeton MY_API_KEY '') plutôt que comme paramètre d'URL:
Avantages par rapport à l'authentification HTTP de base:
Avantages par rapport à la clé API dans l'URL:
Plusieurs fois, j'ai dû réfléchir à la façon d'authentifier les utilisateurs/demandes sur les API et après avoir comparé plus de solutions, j'ai fini par utiliser la solution d'Amazon où je n'ai pas besoin ou je ne peux pas utiliser OAuth. Cette solution est basée sur des signatures qui empêchent les problèmes de "l'homme au milieu" car l'authentification de base et le passage d'un simple jeton envoient des données en texte brut. Oui, vous pouvez ajouter ssl mais cela ajoutera de la complexité au système ...
Je préférerais utiliser la solution de jeton. Si vous n'avez pas d'utilisateurs réels avec leur propre nom d'utilisateur et mot de passe, il semble que vous n'utilisez pas la construction Basic Auth comme prévu. Pas que ce soit nécessairement faux, mais pas aussi propre, OMI. Il supprime également la nécessité d'utiliser des en-têtes personnalisés et je pense que cela rend la mise en œuvre des deux côtés plus facile et plus propre. La prochaine question que je poserais est de savoir si vous devez utiliser l'authentification à deux facteurs ou si vous devez gérer des sessions.