使用 RSA256(非对称)签名 JWT 时是否需要共享密钥?



人们经常读到ResourceOwnerCredentials流是坏的,因为不受信任的客户端(如Javascript或移动应用程序(不能涉及密钥。

如果令牌是非对称签名的,并且客户端可以使用 OAuth 2.0 服务器提供的公钥 JWK(Json Web 密钥(进行验证,这是否有效?

您误解了"资源所有者密码凭据授予"(链接到规范(。

此流的作用是,使用授权代码替换资源所有者(如果是个人,它将是最终用户(凭据。正如规范所说,它可用于替换例如使用基本身份验证的遗留系统。为此,应在客户端和资源所有者之间建立信任。找到一篇好文章,您可以在此链接上阅读更多内容

另一方面,客户端凭据授予是要求客户端获取和维护的授权(链接到规范(。此资助仅适用于机密客户

客户端凭据授予类型只能由机密使用 客户。

我相信您对两种不同的赠款类型感到困惑。如您所见,移动应用程序和JavaScript应用程序是公共客户端。因此,客户端凭据授予不能用于它们。

此外,一旦确实可以使用公钥验证令牌,但要做到这一点,应该通过完成有效流程来获取令牌。

对于机密客户端,可以使用共享机密来加密令牌。但对于公共客户端,无法执行此操作,因为它们无法维护共享机密。

无论如何,以下是使用客户端身份验证的用例(如规范中所述:客户端身份验证(

  • 强制将刷新令牌和授权代码绑定到 发给它们的客户端。 客户端身份验证至关重要 将授权代码传输到重定向时 通过不安全通道或当重定向 URI 具有 未完全注册。

  • 通过禁用客户端或从受损客户端恢复 更改其凭据,从而防止攻击者滥用 被盗的刷新令牌。 更改单个客户端集 凭据比撤销整组 刷新令牌。

  • 实施身份验证管理最佳实践,其中 需要定期凭据轮换。 整套旋转 的刷新令牌可能具有挑战性,而单个令牌的轮换 客户端凭据集要容易得多。

事实上,机密客户端允许您通过更改共享密钥来灵活地更改客户端身份验证

最新更新