【问题标题】:Is a shared secret even necessary when using RSA256 (asymmetric) signed JWT?使用 RSA256(非对称)签名 JWT 时是否需要共享密钥?
【发布时间】:2023-04-09 03:46:01
【问题描述】:

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

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

【问题讨论】:

    标签: oauth-2.0 identityserver3 openid-connect identityserver4


    【解决方案1】:

    您误解了“资源所有者密码凭据授予”(link to spec.).

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

    另一方面,Client Credentials Grant 是一项需要客户端获取和维护的授权 (link to spec.)。并且此赠款仅适用于机密客户

    客户端凭据授权类型必须仅由机密使用 客户。

    我相信您对两种不同的资助类型感到困惑。正如您已经看到的,移动应用程序和 JavaScript 应用程序是公共客户端。所以客户端凭证授予不能用于他们。

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

    对于机密客户端,共享密钥可用于加密令牌。但是对于公共客户端来说,这是无法做到的,因为他们无法维护共享的秘密。

    无论如何这里是使用客户端身份验证的用例(如规范中所述:Client authentication

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

    • 通过禁用客户端或 更改其凭据,从而防止攻击者滥用 被盗的刷新令牌。更改单组客户端 凭证比撤销一整套凭证要快得多 刷新令牌。

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

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

    【讨论】:

    • 对不起,但这并不能回答我的问题。我的问题基本上是:为什么共享秘密(公共客户不可能)是个好主意?它可以抵御哪些威胁?我并没有真正将客户端凭据与 ROPC 混淆。我只是想知道客户机密(适用于某些赠款,而不适用于其他赠款)会给我带来什么好处?
    • @Wolfgang 它在 OAuth2.0 规范中定义。我已经添加了相关的详细信息并展开了答案。
    猜你喜欢
    • 2018-03-05
    • 2021-05-10
    • 2015-12-30
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2016-03-07
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多