将API密钥放在标题或URL中

Tho*_*hle 70 authentication rest url http api-key

我正在为我公司的数据设计一个公共API.我们希望应用程序开发人员注册API密钥,以便我们可以监控使用和过度使用.

由于API是REST,我最初的想法是将此密钥放在自定义标头中.这就是我见过谷歌,亚马逊和雅虎的方式.另一方面,我的老板认为,如果密钥只是URL的一部分,那么API更容易使用,等等" http://api.domain.tld/longapikey1234/resource ".我想有一些事情可以说,但它违反了URL的原则作为你想要的简单地址,而不是你想要它的方式或原因.

您是否认为将密钥放在URL中是合乎逻辑的?或者,如果将简单的javascript前端写入某些数据,您是否还不必手动设置HTTP标头?

Dar*_*ler 65

它应该放在HTTP Authorization标头中.规范在这里https://tools.ietf.org/html/rfc7235

  • @Thomas您可以在auth标头中放置的参数数量没有限制.查看OAuth,它在标题中有大约8个不同的参数值. (5认同)
  • @JAAulde我在这里详细了解http://www.bizcoder.com/where-oh-where-does-the-api-key-go如果您有任何Apache问题的链接,我会感兴趣. (2认同)

sta*_*and 63

如果你想要一个可能吸引老板的论点:想想一下URL是什么.网址是公开的.人们复制并粘贴它们.他们分享他们,他们把它们放在广告上.没有什么能阻止某人(有意或无意)邮寄该URL以供其他人使用.如果您的API密钥位于该URL中,则每个人都拥有它.

  • @AdamCaviness不使用HTTPS,所有API都应该实现.URL已加密.作为管理员,您只能看到DNS查找和与之通信的IP地址,而不是内容.除此之外我同意立场 (4认同)
  • @nickdnk,确实如此。现在就 HTTPS 而言,即使如此,完整的 URL 仍保留在浏览器历史记录中!好玩的东西。我不喜欢 URL 中包含任何敏感内容。 (3认同)
  • 除了您关于公开披露 URL 的观点外,所有有权访问路由器、企业代理服务器、缓存服务器等的网络管理员都可以看到 URL 和内联 API 密钥。 (2认同)

Fiz*_*han 11

最好在标头中使用API​​密钥,而不是在URL中.

如果从浏览器尝试,URL将保存在浏览器的历史记录中.这种情况非常罕见.但是当后端服务器记录所有URL时会出现问题.它可能会暴露API密钥.

有两种方法,您可以在标题中使用API​​ Key

基本授权:

条纹示例:

curl https://api.stripe.com/v1/charges -u sk_test_BQokikJOvBiI2HlWgH4olfQ2:
Run Code Online (Sandbox Code Playgroud)

curl使用-u标志传递基本身份验证凭据(在API密钥之后添加冒号将阻止它询问您的密码).

自定义标题

curl -H "X-API-KEY: 6fa741de1bdd1d91830ba" https://api.mydomain.com/v1/users
Run Code Online (Sandbox Code Playgroud)

  • 为什么选择 X-API-KEY?这 X 是一种自定义标头的 HTTP 规范吗? (3认同)
  • http://stackoverflow.com/questions/3561381/custom-http-headers-naming-conventions (2认同)