人们经常读到ResourceOwnerCredentials流是坏的,因为不受信任的客户端(如Javascript或移动应用程序(不能涉及密钥。
如果令牌是非对称签名的,并且客户端可以使用 OAuth 2.0 服务器提供的公钥 JWK(Json Web 密钥(进行验证,这是否有效?
您误解了"资源所有者密码凭据授予"(链接到规范(。
此流的作用是,使用授权代码替换资源所有者(如果是个人,它将是最终用户(凭据。正如规范所说,它可用于替换例如使用基本身份验证的遗留系统。为此,应在客户端和资源所有者之间建立信任。找到一篇好文章,您可以在此链接上阅读更多内容
另一方面,客户端凭据授予是要求客户端获取和维护的授权(链接到规范(。此资助仅适用于机密客户
客户端凭据授予类型只能由机密使用 客户。
我相信您对两种不同的赠款类型感到困惑。如您所见,移动应用程序和JavaScript应用程序是公共客户端。因此,客户端凭据授予不能用于它们。
此外,一旦确实可以使用公钥验证令牌,但要做到这一点,应该通过完成有效流程来获取令牌。
对于机密客户端,可以使用共享机密来加密令牌。但对于公共客户端,无法执行此操作,因为它们无法维护共享机密。
无论如何,以下是使用客户端身份验证的用例(如规范中所述:客户端身份验证(
强制将刷新令牌和授权代码绑定到 发给它们的客户端。 客户端身份验证至关重要 将授权代码传输到重定向时 通过不安全通道或当重定向 URI 具有 未完全注册。
通过禁用客户端或从受损客户端恢复 更改其凭据,从而防止攻击者滥用 被盗的刷新令牌。 更改单个客户端集 凭据比撤销整组 刷新令牌。
实施身份验证管理最佳实践,其中 需要定期凭据轮换。 整套旋转 的刷新令牌可能具有挑战性,而单个令牌的轮换 客户端凭据集要容易得多。
事实上,机密客户端允许您通过更改共享密钥来灵活地更改客户端身份验证。