为啥令牌认证比基于 API 密钥的认证更安全?

Posted

技术标签:

【中文标题】为啥令牌认证比基于 API 密钥的认证更安全?【英文标题】:Why is token authentication more secure than API key based authentication?为什么令牌认证比基于 API 密钥的认证更安全? 【发布时间】:2021-10-31 13:34:42 【问题描述】:

这是一个典型的基于令牌的身份验证序列。初始登录发送用户名/密码,接收用于所有后续请求的令牌。令牌仅在设定的时间内有效。

如果网络上存在嗅探令牌的恶意侦听器,他们可以冒充客户端,但暴露是有时间限制的。但是如果网络上有一个监听器可以嗅探令牌,他们就不能嗅探初始登录请求并永远继续请求自己的令牌吗?

到那时,整个设置不就相当于在每个请求中发送一个不可撤销的 API 密钥吗?

【问题讨论】:

这取决于您所指的客户端类型和 API 密钥方法。但是,API 密钥从未被设计为安全的,因此不应被视为安全的。 API 密钥或 JWT 方法都需要 SSL,以确保对请求/响应进行编码并且不易受 MITM 的影响。但是,对于不可变的查询字符串 API 密钥,它们可以在客户端浏览器历史记录和服务器访问日志中公开。 【参考方案1】:

我想说 JWT 的主要优势在于它为您提供的安全生态系统和设计模式。这种行为大部分由授权服务器实现,并减少了您需要做的工作:

正如您所说,JWT 是时间受限的,这意味着对于除了存在永久侦听器的边缘情况之外的所有场景,它们都更安全。

Internet 客户端应使用不泄露任何机密数据的机密访问令牌 - 通常使用引用令牌(例如 UUID) - 请参阅 Phantom Token 文章了解其工作原理。

JWT 鼓励 API 接收可数字验证的 scopes 和 claims 的模式,这些claims 可以被信任并用于授权 - 而 API 密钥可以轻松授予对过多数据的访问权限。

同时使用刷新令牌和访问令牌提供了一种用户友好会话和数据泄露撤销机制。例如,访问令牌仅存在 15 分钟,而刷新令牌持续 8 小时。应用程序必须每 15 分钟向授权服务器登记一次,但这很少影响用户。

令牌发行在数据库中进行审核(以及相关的用户同意)并在事件发生后可用 - 例如为您的信息安全人员。

在某些情况下,JWT 可能会受到发件人的限制,例如业务伙伴之间的financial grade connections,因此攻击者无法使用他们拦截的令牌。

API 密钥实际上可以设计为像引用令牌一样工作,因为它们对客户来说是一样的。然后,您需要在后端进行大量自定义工作。而免费的授权服务器将为您完成这项工作。

【讨论】:

以上是关于为啥令牌认证比基于 API 密钥的认证更安全?的主要内容,如果未能解决你的问题,请参考以下文章

ssh密钥认证

oAuth令牌认证 - 使用相同的密钥

如何在 Linux 中配置基于密钥认证的 SSH

如何在 Linux 中配置基于密钥认证的 SSH

为啥 API 网关和认证服务应该不同?

OpenSSH的RSA/DSA密钥认证系统