REST API 和 API KEY
Posted
技术标签:
【中文标题】REST API 和 API KEY【英文标题】:REST API and API KEY 【发布时间】:2014-04-27 06:38:03 【问题描述】:请有人解释一下如何使用 api 密钥以及它有什么用处。
我对此进行了很多搜索,但得到了不同且相互矛盾的答案。有人说 API 密钥是保密的,它永远不会作为通信的一部分发送,而其他人则在没有任何加密的情况下将其发送给客户端。客户的签名是什么?他如何生成它以及服务器可以用它做什么?为什么要使用 api 密钥而不是使用旧的用户名-密码对呢?谁能详细解释一下客户端(android 设备)和服务器(php api)之间的通信情况。
如果有任何好的教程、代码示例和对初学者的解释,我将不胜感激。
【问题讨论】:
你到底想做什么? 有一个与 API 通信的 Android 应用程序。 clinet 可以发送 GET 和 PUT 请求来询问和修改服务器上的资源。我想对用户进行身份验证以查看他们是否已登录以及他们是否有权编辑资源 【参考方案1】:API 认证是一个复杂的话题。下面我将尽力解释问题的一部分:为什么 API 密钥比用户名/密码更好?
我们开始吧。
在构建(或使用 API)时,开发人员提出的一个常见问题是“为什么此服务需要 API 密钥而不是我的用户名和密码?”这是一个很好的问题!
首先,让我们谈谈 API 密钥通常是什么。
API 密钥通常是随机生成的字母和数字字符串。此外,API 密钥通常分为两部分:ID 和秘密。例如,如果您使用像 Stormpath 这样的网络服务,您可能有两个如下所示的 API 密钥:
API_KEY_ID=kzjbOg3iOm4k4MRpBss76yxlZSPJtoOPaqxirsfX API_KEY_SECRET=A8FnQWM7RpgGjU3sZjOUgMIq5t8mvAhQES9iE30S您可以将 API 密钥 ID 视为用户名。这是一个全局唯一标识符,允许 API 服务找到您的帐户。
您可以将 API 密钥视为密码。这是一个密码,当与正确的 API 密钥 ID 匹配时,将授予您访问相关 API 服务的权限。
您不想使用用户名和密码对 API 进行身份验证的主要原因是:
即使 API 通过 SSL 提供服务,也有许多可利用的漏洞可能会破坏您的凭据。如果您使用您的用户名/密码登录 API 服务,并且攻击者获取了这些凭据,他们就可以访问您的整个帐户。
如果您使用您的用户名/密码对 API 进行身份验证,如果您的服务器/API 客户端之一遭到入侵,会发生什么情况?这意味着您需要重置您的用户名/密码并为所有使用它的客户端更新它。这可能既耗时又昂贵。
通过使用用户名/密码,您通常会限制自己使用某种类型的 API。通过拥有 API 密钥对,您可以将 API 凭证分离到不同的访问级别(可能密钥对只能访问某些数据,而另一个可以访问其他类型的数据)。
API 密钥对通常是一个更好的主意。除了明显的安全优势之外,它们还有其他用途:
如果 API 密钥对泄露,您通常可以创建/循环 API 密钥对,而无需更新您拥有的每个客户端。
您可以使用 API 密钥对为您的 API 提供子账户功能。
希望有帮助!
【讨论】:
【参考方案2】:看看这个
REST authentication and exposing the API key
Why do some API providers require an API key?
然后研究一下Oauth
【讨论】:
以上是关于REST API 和 API KEY的主要内容,如果未能解决你的问题,请参考以下文章
如果 REST 控制器类和接口具有使用 @HystrixCommand 注释的 API,则不会加载所有 REST API
JSON:带有 django-rest-framework-json-api 和 JWT 的 API