web-dev-qa-db-fra.com

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

Je conçois 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 de pouvoir surveiller l’utilisation et la surutilisation.

Puisque l’API est REST, ma première idée est de placer cette clé dans un en-tête personnalisé. C'est comme ça que j'ai vu Google, Amazon et Yahoo le faire. Mon chef, en revanche, pense que l’API est plus facile à utiliser si la clé devient simplement une partie de l’URL, etc. " http: //api.domain.tld/longapikey1234/ ressource ". J'imagine qu'il y a quelque chose à dire à ce sujet, mais cela viole le principe de l'URL en tant qu'adresse simple de ce que vous voulez, et non de la manière ou des raisons pour lesquelles vous le voulez.

Trouveriez-vous logique de mettre la clé dans l'URL? Ou préférez-vous ne pas avoir à définir manuellement les en-têtes HTTP si vous écrivez une interface JavaScript simple dans certaines données?

69
Thomas Ahle

Il doit être placé dans l'en-tête HTTP Authorization. La spécification est ici https://tools.ietf.org/html/rfc7235

65
Darrel Miller

Si vous voulez un argument qui pourrait plaire à un patron: Pensez à ce qu'est une URL. Les URL sont publiques. Les gens les copient et les collent. Ils les partagent, ils les mettent sur des publicités. Rien n'empêche quelqu'un (sciemment ou non) d'envoyer cette URL par la poste à d'autres personnes. Si votre clé d'API est dans cette URL, tout le monde l'a.

62
stand

Il est préférable d’utiliser l’API Key dans l’en-tête et non dans l’URL.

Les URL sont enregistrées dans l'historique du navigateur si celui-ci est essayé à partir du navigateur. C'est un scénario très rare. Mais le problème survient lorsque le serveur principal enregistre toutes les URL. Cela pourrait exposer la clé API.

De deux manières, vous pouvez utiliser l'API Key in header

Autorisation de base:

Exemple de bande:

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

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

En-tête personnalisé

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

Je ne mettrais pas la clé dans l'URL, car cela enfreint ce "standard" lâche qu'est REST. Cependant, si vous le faisiez, je le placerais dans la partie "utilisateur" de l'URL.

par exemple: http: //[email protected]/myresource/myid

De cette façon, il peut également être passé en tant qu'en-tête avec basic-auth.

2
Adam Wagner

passer des clés api dans des paramètres empêche les clients de garder leurs clés API secrètes, ils ont tendance à perdre des clés régulièrement. Une meilleure approche consiste à l'insérer dans l'en-tête de l'url de la requête. Vous pouvez définir l'en-tête de clé d'utilisateur 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 de clé d'utilisateur sur votre clé d'api.

1
himanshu_chawla