授权流程是否应该对 Web 应用程序同时使用机密和 PKCE
Should Authorization flow use both secret and PKCE for a Web app
我目前正在查看不同的 OIDC 流程,发现 AuthorizationCode 流程和 AuthorizationCode 流程与 PKCE。
我发现的几乎所有地方都说 PKCE 是客户端密钥的替代品,应该由本机应用程序使用。
现在我想知道不使用客户端密钥和 PKCE 的原因是什么,这会有用还是没有必要?
我是 运行 我测试过的 Openiddict 服务器将检查客户端机密和代码验证程序。但无论我读到什么,它都只说 PKCE 而没有(静态)秘密。
Almost all places that I found said that the PKCE is a replacement for the Client secret and should be used by native applications.
绝对不是。 PKCE 和客户端身份验证是两个相加但完全独立的措施:
客户端身份验证 - 通常由 server-side 客户端使用 - 保证只有授权代码被颁发到的客户端应用程序才能兑换它。有了这个安全措施,即使是资源所有者本人也无法兑换自己的代码。
PKCE保证只有发起授权请求的客户端才能发送有效的token请求,因为授权码绑定到初始码challenge/verifier,只有合法的才知道生成它的客户端。对于 mobile/desktop 应用程序,PCKE 对于防止依赖于修改特定应用程序处理的 URI 方案的攻击特别有用,这些攻击可能会被劫持到 re-reroute 授权响应并窃取授权代码。
如今,我们也倾向于在机密 server-side 应用程序中使用 PKCE 来防止授权代码泄漏,即使它最初是为 public 应用程序(如移动或桌面应用程序)设计的。在这种情况下,您绝对应该将其与客户端身份验证(即客户端密码验证)结合起来。
我目前正在查看不同的 OIDC 流程,发现 AuthorizationCode 流程和 AuthorizationCode 流程与 PKCE。
我发现的几乎所有地方都说 PKCE 是客户端密钥的替代品,应该由本机应用程序使用。
现在我想知道不使用客户端密钥和 PKCE 的原因是什么,这会有用还是没有必要?
我是 运行 我测试过的 Openiddict 服务器将检查客户端机密和代码验证程序。但无论我读到什么,它都只说 PKCE 而没有(静态)秘密。
Almost all places that I found said that the PKCE is a replacement for the Client secret and should be used by native applications.
绝对不是。 PKCE 和客户端身份验证是两个相加但完全独立的措施:
客户端身份验证 - 通常由 server-side 客户端使用 - 保证只有授权代码被颁发到的客户端应用程序才能兑换它。有了这个安全措施,即使是资源所有者本人也无法兑换自己的代码。
PKCE保证只有发起授权请求的客户端才能发送有效的token请求,因为授权码绑定到初始码challenge/verifier,只有合法的才知道生成它的客户端。对于 mobile/desktop 应用程序,PCKE 对于防止依赖于修改特定应用程序处理的 URI 方案的攻击特别有用,这些攻击可能会被劫持到 re-reroute 授权响应并窃取授权代码。
如今,我们也倾向于在机密 server-side 应用程序中使用 PKCE 来防止授权代码泄漏,即使它最初是为 public 应用程序(如移动或桌面应用程序)设计的。在这种情况下,您绝对应该将其与客户端身份验证(即客户端密码验证)结合起来。