【问题标题】:Should Authorization flow use both secret and PKCE for a Web app授权流程是否应该同时为 Web 应用程序使用密钥和 PKCE
【发布时间】:2019-11-09 15:34:05
【问题描述】:

我目前正在查看不同的 OIDC 流程,发现 AuthorizationCode 流程和使用 PKCE 的 AuthorizationCode 流程。

我发现的几乎所有地方都说 PKCE 是客户端密码的替代品,应该由本机应用程序使用。

现在我想知道为什么不使用客户端密码和 PKCE,这会有用还是没有必要?

我正在运行一个我测试过的 Openiddict 服务器,它将检查客户端密码和代码验证程序。但是在我阅读的所有地方,它都只是说 PKCE 而不是(静态)秘密。

【问题讨论】:

    标签: oauth-2.0 openid openid-connect


    【解决方案1】:

    我发现的几乎所有地方都说 PKCE 是客户端密码的替代品,应该由本机应用程序使用。

    绝对不是。 PKCE 和客户端身份验证是两个附加但完全独立的措施:

    • 客户端身份验证 - 通常由服务器端客户端使用 - 保证只有获得授权码的客户端应用程序才能赎回它。有了这种安全措施,即使是资源所有者本人也无法兑换自己的代码。

    • PKCE 保证只有发起授权请求的客户端才能发送有效的令牌请求,因为授权代码绑定到只有生成它的合法客户端才知道的初始代码质询/验证器。对于移动/桌面应用程序,PCKE 对于防止依赖于修改由特定应用程序处理的 URI 方案的攻击特别有用,这些攻击可能被劫持以重新路由授权响应并窃取授权码。

    如今,我们也倾向于在机密的服务器端应用程序中使用 PKCE 来防止授权代码泄露,尽管它最初是为移动或桌面应用程序等公共应用程序设计的。在这种情况下,您绝对应该将其与客户端身份验证(即客户端密码验证)结合使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多