【发布时间】:2023-04-09 03:46:01
【问题描述】:
人们经常读到 ResourceOwnerCredentials 流程很糟糕,因为不受信任的客户端(如 Javascript 或移动应用程序)不能涉及密钥。
如果令牌是非对称签名并且可以由客户端使用 OAuth 2.0 服务器提供的公钥 JWK(Json Web 密钥)进行验证,这是否有效?
【问题讨论】:
标签: oauth-2.0 identityserver3 openid-connect identityserver4
人们经常读到 ResourceOwnerCredentials 流程很糟糕,因为不受信任的客户端(如 Javascript 或移动应用程序)不能涉及密钥。
如果令牌是非对称签名并且可以由客户端使用 OAuth 2.0 服务器提供的公钥 JWK(Json Web 密钥)进行验证,这是否有效?
【问题讨论】:
标签: oauth-2.0 identityserver3 openid-connect identityserver4
您误解了“资源所有者密码凭据授予”(link to spec.).
此流程的作用是使用授权代码替换资源所有者(如果是人,则将是最终用户)凭据。正如规范所说,它可用于替换传统系统,例如使用基本身份验证。为此,应在客户和资源所有者之间建立信任。找到一篇好文章,您可以在 link 上阅读更多内容
另一方面,Client Credentials Grant 是一项需要客户端获取和维护的授权 (link to spec.)。并且此赠款仅适用于机密客户
客户端凭据授权类型必须仅由机密使用 客户。
我相信您对两种不同的资助类型感到困惑。正如您已经看到的,移动应用程序和 JavaScript 应用程序是公共客户端。所以客户端凭证授予不能用于他们。
此外,once 确实可以使用公钥验证令牌,但要做到这一点,应该通过完成有效流程来获取令牌。
对于机密客户端,共享密钥可用于加密令牌。但是对于公共客户端来说,这是无法做到的,因为他们无法维护共享的秘密。
无论如何这里是使用客户端身份验证的用例(如规范中所述:Client authentication)
强制将刷新令牌和授权代码绑定到 他们被发给的客户。客户端身份验证至关重要 当授权码被传输到重定向时 通过不安全通道或重定向 URI 具有 未完整注册。
通过禁用客户端或 更改其凭据,从而防止攻击者滥用 被盗的刷新令牌。更改单组客户端 凭证比撤销一整套凭证要快得多 刷新令牌。
实施身份验证管理最佳实践,其中 需要定期的凭证轮换。整套旋转 刷新令牌可能具有挑战性,而单个 设置客户端凭据要容易得多。
事实上,机密客户端允许您通过更改共享密钥来灵活地更改客户端身份验证。
【讨论】: