同一应用程序的令牌发行者之间共享的签名密钥的安全性

Posted

技术标签:

【中文标题】同一应用程序的令牌发行者之间共享的签名密钥的安全性【英文标题】:Security of signing keys shared between token issuers for the same application 【发布时间】:2022-01-03 09:19:41 【问题描述】:

假设我们有一个令牌颁发者负责 OAuth 授权代码流,另一个负责客户端凭据流,它们都专门为同一个应用程序提供 JWT。这两个令牌颁发者不应使用相同的签名密钥是否有很好的安全理由?

【问题讨论】:

【参考方案1】:

我没有发现在两个应用程序之间共享相同的私有签名密钥存在任何重大安全问题。但这完全取决于您的安全级别以及您将如何处理密钥的轮换和管理。

但是,如果其中一个提供商被黑客入侵,那么另一个当然也容易受到攻击。但我认为答案是视情况而定。

许多 IdentityProviders 支持多个签名密钥,也许一个客户端需要比其他客户端更强大的密钥/唱歌方案。或者一个系统只需要使用 RSA 和其他一些必需的 ECDSA 密钥。

但是,您通常会为 授权代码流客户端凭据流 使用相同的身份提供程序。因为接收访问令牌的 API 更喜欢有一个提供者来下载公钥。

【讨论】:

以上是关于同一应用程序的令牌发行者之间共享的签名密钥的安全性的主要内容,如果未能解决你的问题,请参考以下文章

更改我所有已发布应用程序的签名密钥。有可能吗?

如何为OAuth2 JWT验证共享公钥?

JWT 是不是共享/存储用于在客户端和服务器上签名的密钥?

签名验证失败。没有提供安全密钥来验证签名

HMAC 256 与 HMAC 512 JWT 签名加密

使用 .NET Core 中的公共安全密钥配置 JWT Bearer 令牌验证