REST API和API KEY

时间:2014-03-20 12:10:16

标签: api authentication

请有人解释我如何使用api密钥以及它有什么用处。

我已经搜索了很多关于这一点,我得到了不同且相互矛盾的答案。有人说API密钥是保密的,它永远不会作为通信的一部分发送,而其他人则在没有任何加密的情况下将其发送给客户端。客户的签名是什么?他如何生成它以及可以用它做什么服务器?为什么要使用api密钥进行修改而不是使用旧的用户名密码对呢?有人可以详细解释一下客户端(Android设备)和服务器(php api)之间的通信情况。

我很感激任何好的教程,代码示例和初学者的解释。

2 个答案:

答案 0 :(得分:8)

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提供子帐户功能。

希望有所帮助!

答案 1 :(得分:1)