将 API 密钥放在标头或 URL 中

问题描述 投票:0回答:6

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

由于 API 是 REST,我最初的想法是将此密钥放在自定义标头中。我看到谷歌、亚马逊和雅虎就是这样做的。另一方面,我的老板认为,如果密钥只是 URL 的一部分,等等,那么 API 会更容易使用。“http://api.domain.tld/longapikey1234/resource”。我想对此有一些话要说,但它违反了 URL 的原则,即您想要什么的简单地址,而不是您想要它的方式或原因。

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

rest http url authentication api-key
6个回答
103
投票

它应该放在 HTTP 授权标头中。规范在这里https://www.rfc-editor.org/rfc/rfc7235


81
投票

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


24
投票

最好在标头中使用 API Key,而不是在 URL 中。

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

您可以通过两种方式在 header 中使用 API Key

基本授权:

条纹示例:

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

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

自定义标题

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

2
投票

在参数中传递 api 密钥会使客户端很难保守其 API 密钥的秘密,他们往往会定期泄漏密钥。 更好的方法是将其传递到请求 url 的标头中。您可以在代码中设置 user-key 标头。 为了测试您的请求 Url,您可以通过将 user-key 标头设置为您的 api-key 来使用 google chrome 中的 Postman 应用程序。


1
投票

我不会将密钥放在 url 中,因为它确实违反了 REST 这个松散的“标准”。但是,如果您这样做,我会将其放在网址的“用户”部分中。

例如:http://[电子邮件受保护]/myresource/myid

这样它也可以作为带有 basic-auth 的标头传递。


0
投票

这取决于数据。

如果用户将提供数据,请将其放入网址中。

如果您提供数据,请将其放在标题中。

© www.soinside.com 2019 - 2024. All rights reserved.