这些天我几乎在每个跨服务应用程序中都能看到这个词。
API 密钥到底是什么以及它的用途是什么? 它应该用于哪些目的,不应该用于哪些目的?
另外,API 公钥和私钥有什么区别。
何时应使用公钥和私钥证书密钥代替 API 密钥?
API 密钥的“确切”用途很大程度上取决于它的颁发者以及它的用途。然而,总的来说,API 密钥是某种形式的秘密令牌的名称,该令牌与 Web 服务(或类似)请求一起提交,以便识别请求的来源。密钥可能包含在请求内容的某些摘要中,以进一步验证来源并防止篡改值。
通常,如果您可以肯定地识别请求的来源,则它可以作为一种身份验证形式,从而实现访问控制。例如,您可以根据执行请求的人员来限制对某些 API 操作的访问。对于通过销售此类服务赚钱的公司来说,这也是跟踪谁使用该服务进行计费的一种方式。此外,通过阻止密钥,您可以部分防止请求量过高时的滥用。
一般来说,如果您同时拥有公钥和私钥 API 密钥,则表明密钥本身就是传统的公钥/私钥对,用于某种形式的 非对称加密技术 或相关的数字签名。这些是更安全的技术,可以主动识别请求的来源,此外还可以保护请求的内容免遭窥探(除了篡改之外)。
一般来说:
API 密钥可以简单地识别您的身份。
如果存在公共/私有区别,则公共密钥是您可以分发给其他人的密钥,以允许他们从 api 获取有关您的一些信息子集。 私钥仅供您使用,并提供对您所有数据的访问。
看起来很多人使用 API 密钥作为安全解决方案。底线是:永远不要将 API 密钥视为秘密,事实并非如此。无论是否使用 https,任何可以读取请求的人都可以看到 API 密钥,并可以进行任何他们想要的调用。 API 密钥应该就像“用户”标识符一样,因为即使与 ssl 一起使用,它也不是完整的安全解决方案。
更好的描述位于 Eugene Osovetsky 链接中:使用大多数 API 时,为什么它们需要两种类型的身份验证,即密钥和秘密? 或者检查 http://nordicapis.com/why-api-keys-are-not-enough/
API 密钥是当该服务的用户被接受为该服务的用户时分配给该用户的唯一值。
该服务维护所有已颁发的密钥,并在每次请求时检查它们。
通过查看请求时提供的密钥,服务会检查它是否是有效密钥,以决定是否授予用户访问权限。
API 密钥只是验证 Web 服务用户身份的一种方式。
这样想,“公共 API 密钥”类似于数据库用作验证服务器登录名的用户名。 “私有 API 密钥”将类似于密码。 通过使用此方法的站点/数据库,可以在第三方/验证服务器上维护安全性,以便验证发布或编辑站点/数据库的请求。
API 字符串只是您的站点/数据库的登录 URL,用于联系验证服务器。