什么是API密钥?[关闭]


109

这些天来,我几乎在每个交叉服务应用程序中都看到这个词。

API密钥到底是什么?其用途是什么?

同样,公共和私有API密钥之间有什么区别。

Answers:


111

API密钥的“确切”用途在很大程度上取决于谁发布它,以及所使用的服务是什么。但是,总的来说,API密钥是赋予某种形式的秘密令牌的名称,该令牌与Web服务(或类似)请求一起提交,以标识请求的来源。密钥可以包含在请求内容的某些摘要中,以进一步验证来源并防止篡改值。

通常,如果您可以肯定地识别请求的来源,则它可以作为身份验证的一种形式,这可以导致访问控制。例如,您可以根据谁执行请求来限制对某些API操作的访问。对于从销售此类服务中获利的公司而言,这也是一种跟踪谁将其用于计费目的的方式。此外,通过阻塞密钥,可以在请求量过高的情况下部分防止滥用。

通常,如果您同时具有公共和私有API密钥,则表明密钥本身就是以某种形式的非对称加密或相关的数字签名使用的传统公共/私有密钥对。这些是更安全的技术,用于可靠地标识请求的来源,并另外用于保护请求的内容不被监听(除了篡改外)。


12
说得好!但是,以我的经验有限,公钥/私钥的区别与公钥加密无关。我见过的“公共”密钥通常是“轻便访问”,换句话说,您可以分发该密钥以授予第三方访问非敏感数据的权限,而不会泄露该王国的密钥。
timdev

2
@Rob +1给出详细答案@tim +1给出正确答案!
OrangeRind

@tim-同意。我认为我看到的更常见的方法是拥有一个私有摘要密钥。
罗布

24

一般而言:

API密钥仅标识您。

如果存在公共/私有区别,则可以将公共密钥分配给其他人,以允许他们从api中获取有关您的信息的一些子集。私钥仅供您使用,并提供对所有数据的访问。


在大多数情况下,它们看起来像哈希。我的观察正确吗?
OrangeRind

只要它们是唯一的,就可以生成它们。某些数据的散列似乎是一种合理的生成方式,是的。
马修·沙利

是的,它们看起来像哈希。毕竟,您不希望它们变得容易猜测。
timdev

1
或多或少-大多数沼泽标准API密钥是通过散列某个伪随机值并对结果执行一些标准纯文本编码(例如base16,base64等)而生成的。
Rob

18

看起来很多人都使用API​​密钥作为安全解决方案。底线是:切勿将API密钥视为秘密,而不是视为秘密。不论是否使用https,任何可以读取请求的人都可以看到API密钥,并且可以进行他们想要的任何调用。即使与ssl一起使用,API密钥也应作为“用户”标识符,因为它不是一个完整的安全解决方案。

Eugene Osovetsky的链接提供了更好的描述:在使用大多数API时,为什么它们要求两种身份验证类型,即密钥和密钥? 或检查http://nordicapis.com/why-api-keys-are-not-enough/


2
如您所见,这是一个古老的问题,根据现代的Stack Overflow标准,可能会被认为“过于宽泛”(或“偏离主题”)。这样的问题往往会吸引一些自以为是的答案,通常会被低估和/或删除。避免此类问题通常是最好的解决方法。您可以查看帮助中心以了解更多信息。
Dev-iL

10

API密钥是唯一的值,当该用户被接受为该服务的用户时,该值便分配给该用户。

该服务维护所有颁发的密钥,并在每次请求时对其进行检查。

通过在请求处查看提供的密钥,服务将检查是否是有效密钥,以决定是否授予用户访问权限。


那公共和私人的呢?
OrangeRind

1
公钥和私钥来自加密领域,并且与非对称加密有关。我从未听说过这些在API密钥意义上使用的术语。

2

API密钥只是认证Web服务用户的一种方法。


1

以这种方式考虑,“公共API密钥”类似于您的数据库用作验证服务器登录名的用户名。这样,“专用API密钥”将类似于密码。通过使用此方法的站点/数据库,可以在第三方/验证服务器上维护安全性,以确保发布或编辑站点/数据库的真实请求。

API字符串只是您的站点/数据库与验证服务器联系的登录URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.