gpt4 book ai didi

api - API key 和 OAuth 的客户端凭据流之间的安全差异是什么?

转载 作者:行者123 更新时间:2023-12-03 16:20:10 28 4
gpt4 key购买 nike

考虑一个客户端直接访问(机器对机器)并且不需要用户特定身份验证的 API。我理解它的方式,在 client_credentials ,客户端必须存储一个 client_idclient_secret它用于获取和刷新 token 。使用 API key ,客户端只需存储 key 。在这种情况下,是什么让 OAuth 更安​​全?在我看来,如果 API key 从未被泄露,任何攻击者都无法冒充目标客户端。如果 API key 被泄露,它实际上与泄露 client_id 相同。和 client_secret ,攻击者将能够使用它来获取 token 并访问 API 中的数据,冒充客户端。
编辑:澄清这是一个机器对机器的调用

最佳答案

TLDR;
差异归结为 直接访问与委托(delegate)访问 .
OAuth 允许您进行委托(delegate)访问。无论是否涉及用户,委派访问的好处都不会改变。使 OAuth 授权代码流对用户到机器的访问具有吸引力的相同论点适用于机器对机器访问的 OAuth 客户端凭据流。
问问自己,您是否希望资源服务器处理客户端凭据?
在机器对机器访问的 secret 客户端上,委托(delegate)访问与直接访问的成本可能远远超过 yield 。这就是为什么这么多 API 仍然使用 API key 的原因。您必须为您的个人用例做出决定。
差异
在 OAuth 客户端凭据流中,客户端向资源服务器发送访问 token ,授权服务器在提供其客户端 ID 和 secret 后预先获得该 token 。资源服务器永远不会看到客户端密码。使用 API key ,客户端会随每个请求发送 key 。
OAuth 为授权服务器添加了一个额外的间接层,这样凭据本身就不会被传输到资源服务器。这允许授权服务器仅在有限的时间内或以有限的权限授予客户端访问权限,而无需更改实际的客户端凭据。它还允许在不撤销凭据本身的情况下撤销访问 token 。对于客户端的多个实例,这允许您撤销某些但不是全部的访问权限。
当然,这一切都以更复杂的实现为代价,以及从客户端到授权服务器的额外往返。
我不会涉及传输(URL、 header 、正文等)或格式(随机字符串、签名 JWT 等),因为这些对于访问 token 和 API key 可能是相同的。
OAuth 的另一个(可能不是那么明显)优势是有一个明确的规范,库、文档和讨论可以基于该规范。直接访问没有单一的最佳实践,当提到 API key 等直接访问方法时,不同的人可能会理解不同的事情。

关于api - API key 和 OAuth 的客户端凭据流之间的安全差异是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64446566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com