什么是 API 密钥? [关闭]

Posted

技术标签:

【中文标题】什么是 API 密钥? [关闭]【英文标题】:What is an API key? [closed] 【发布时间】:2010-11-29 23:58:00 【问题描述】:

我现在几乎在每个跨服务应用程序中都看到了这个词。

什么是 API 密钥及其用途?

另外,公共和私有 API 密钥有什么区别。

【问题讨论】:

【参考方案1】:

看起来很多人使用 API 密钥作为安全解决方案。底线是:永远不要将 API 密钥视为机密,事实并非如此。无论是否在 https 上,任何可以读取请求的人都可以看到 API 密钥并可以进行任何他们想要的调用。 API 密钥应该只是一个“用户”标识符,因为即使与 ssl 一起使用,它也不是一个完整的安全解决方案。

更好的描述在 Eugene Osovetsky 链接到:When working with most APIs, why do they require two types of authentication, namely a key and a secret? 或查看http://nordicapis.com/why-api-keys-are-not-enough/

【讨论】:

如您所见,这是一个老问题,根据现代 Stack Overflow 标准,可能会被认为“太宽泛”(或“离题”)。此类问题往往会吸引固执己见的答案,这些答案通常会被否决和/或删除。远离这些问题通常是最好的做法。您可以查看help center 了解更多信息。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

API 密钥只是对 Web 服务用户进行身份验证的一种方式。

【讨论】:

【参考方案4】:

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

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

一般来说,如果您同时拥有一个公共 API 密钥和一个私有 API 密钥,那么这表明密钥本身就是传统的公共/私有密钥对,用于某种形式的 asymmetric cryptography 或相关的数字签名。这些是更安全的技术,可以积极地识别请求的来源,此外,还可以保护请求的内容不被窥探(除了篡改之外)。

【讨论】:

说得好!然而,根据我有限的经验,公共/私人的区别与公钥加密无关。我见过的“公共”密钥通常是“访问精简版”——换句话说,您可以分发密钥以授予第三方访问非敏感数据的权限,而无需将密钥泄露给王国。 @Rob +1 以获得详细答案 @tim +1 为深思熟虑! @tim - 同意。我认为我见过的更常见的方法是拥有一个私有摘要密钥。【参考方案5】:

API 密钥是此服务的用户在被接受为服务用户时分配给他的唯一值。

该服务维护所有已颁发的密钥并在每次请求时检查它们。

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

【讨论】:

那么公共和私人呢? 公钥和私钥来自加密领域,与非对称加密有关。我从未听说过在 API 密钥的意义上使用这些术语。【参考方案6】:

很笼统地说:

API 密钥仅用于识别您。

如果有公共/私人的区别,那么公共密钥就是您可以分发给其他人的密钥,以允许他们从 api 获取有关您的一些信息子集。私钥仅供您使用,并提供对您所有数据的访问权限。

【讨论】:

大多数时候它们看起来像哈希。我的观察正确吗? 可以随意生成,只要它们是唯一的。一些数据的散列似乎是一种合理的生成方法,是的。 是的,它们看起来像哈希。毕竟,您不希望它们很容易被猜到。 或多或少 - 大多数沼泽标准 API 密钥是通过散列一些伪随机值并对结果执行一些标准纯文本编码生成的,例如base16、base64 等

以上是关于什么是 API 密钥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

检查 Berkeley DB C++ API 中是不是存在密钥 [关闭]

在 Flask 中是不是有使用 API 密钥进行身份验证的公认方法? [关闭]

如何在 EC2 上集成 AWS 参数存储以使用 Python 代码加密令牌/API 密钥? [关闭]

获取api API返回未定义的[关闭]

授权和许可证密钥有啥区别? [关闭]

使用paypal api发送发票? [关闭]