Oauth 2.0 授权流是否应该对Web应用同时使用secret和PKCE

Oauth 2.0 授权流是否应该对Web应用同时使用secret和PKCE,oauth-2.0,openid,openid-connect,Oauth 2.0,Openid,Openid Connect,我目前正在研究不同的OIDC流,发现AuthorizationCode流和AuthorizationCode流与PKCE 我发现的几乎所有地方都说PKCE是客户机机密的替代品,应该由本机应用程序使用 现在我想知道为什么不使用客户机机密和PKCE,这是有用的还是不必要的 我正在运行一个我已经测试过的Openiddict服务器,它将检查客户机机密和代码验证程序。但无论我读到哪里,它都只是说PKCE,没有(静态)秘密 我发现的几乎所有地方都说PKCE是客户机机密的替代品,应该由本机应用程序使用 绝对不

我目前正在研究不同的OIDC流,发现AuthorizationCode流和AuthorizationCode流与PKCE

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

现在我想知道为什么不使用客户机机密和PKCE,这是有用的还是不必要的

我正在运行一个我已经测试过的Openiddict服务器,它将检查客户机机密和代码验证程序。但无论我读到哪里,它都只是说PKCE,没有(静态)秘密

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

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

  • 客户端身份验证(通常由服务器端客户端使用)保证只有授权码颁发给的客户端应用程序才能赎回。有了这个安全措施,即使资源所有者自己也无法赎回自己的代码

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

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