107 votes

Placez la clé API dans les en-têtes ou dans l'URL

Je suis en train de concevoir une API publique pour les données de mon entreprise. Nous voulons que les développeurs d'applications s'inscrivent pour obtenir une clé d'API afin que nous puissions contrôler l'utilisation et la surutilisation.

Comme l'API est REST, ma première idée est de mettre cette clé dans un en-tête personnalisé. C'est ce que j'ai vu faire chez Google, Amazon et Yahoo. Mon patron, quant à lui, pense que l'API est plus facile à utiliser si la clé fait simplement partie de l'URL, etc. " http://api.domain.tld/longapikey1234/resource ". Je suppose qu'il y a quelque chose à dire à ce sujet, mais cela viole le principe de l'URL en tant que simple adresse de ce que vous voulez, et non pas comment ou pourquoi vous le voulez.

Trouveriez-vous logique de placer la clé dans l'URL ? Ou préféreriez-vous ne pas avoir à définir manuellement les en-têtes HTTP si vous écrivez un simple frontend javascript pour certaines données ?

99voto

Darrel Miller Points 56797

Il doit être placé dans l'en-tête d'autorisation HTTP. La spécification est ici https://www.rfc-editor.org/rfc/rfc7235

81voto

stand Points 1424

Si vous voulez un argument qui puisse plaire à un patron : Réfléchissez à ce qu'est un URL. Les URL sont publiques. Les gens les copient et les collent. Ils les partagent, ils les placent sur des publicités. Rien n'empêche quelqu'un (sciemment ou non) d'envoyer cet URL à d'autres personnes pour qu'elles l'utilisent. Si votre clé API se trouve dans cette URL, tout le monde l'a.

24voto

Fizer Khan Points 4128

Il est préférable d'utiliser la clé API dans l'en-tête, et non dans l'URL.

Les URL sont sauvegardées dans l'historique du navigateur si elles sont essayées à partir du navigateur. C'est un scénario très rare. Mais le problème survient lorsque le serveur dorsal enregistre toutes les URL. Il peut exposer la clé API.

Il existe deux façons d'utiliser la clé API dans l'en-tête

Autorisation de base :

Exemple à partir de la bande :

curl https://api.stripe.com/v1/charges -u sk_test_BQokikJOvBiI2HlWgH4olfQ2:

curl utilise l'option -u pour transmettre les informations d'authentification de base (l'ajout de deux points après votre clé API empêchera le système de vous demander un mot de passe).

En-tête personnalisé

curl -H "X-API-KEY: 6fa741de1bdd1d91830ba" https://api.mydomain.com/v1/users

2voto

himanshu_chawla Points 80

Le fait de passer une clé d'API dans les paramètres rend difficile pour les clients de garder leurs clés d'API secrètes, ils ont tendance à les divulguer régulièrement. Une meilleure approche consiste à la passer dans l'en-tête de l'url de demande. Vous pouvez définir l'en-tête user-key dans votre code. Pour tester votre url de demande, vous pouvez utiliser l'application Postman dans Google Chrome en définissant l'en-tête user-key sur votre clé d'api.

1voto

Adam Wagner Points 7232

Je ne mettrais pas la clé dans l'url, car cela enfreint cette "norme" peu contraignante qu'est REST. Cependant, si vous le faisiez, je la placerais dans la partie "utilisateur" de l'url.

eg : http://me@example.com/myresource/myid

De cette manière, il peut également être transmis en tant qu'en-tête avec basic-auth.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X