我目前正在查看不同的OIDC流程,并找到了带有PKCE的AuthorizationCode流和AuthorizationCode流。
我发现几乎所有地方都说PKCE可以替代客户端机密,并且应由本机应用程序使用。
现在,我想知道为什么不使用客户机密和PKCE的原因是什么,这是否有用还是仅仅是不必要的?
我正在运行经过测试的Openiddict服务器,它将检查客户端密码和代码验证程序。但是我读过的任何地方都只说PKCE,没有(静态)秘密。
答案 0 :(得分:1)
我发现几乎所有地方都说PKCE可以替代客户端机密,并且应由本机应用程序使用。
绝对不是。 PKCE和客户端身份验证是两个相加但完全独立的措施:
客户端身份验证-通常由服务器端客户端使用-保证只有颁发了授权代码的客户端应用程序才能兑换它。有了这种安全措施,即使资源所有者本人也无法兑现自己的代码。
PKCE保证只有发起授权请求的客户端才能发送有效的令牌请求,因为授权代码已绑定到仅由生成该请求的合法客户端知道的初始代码质询/验证程序。在移动/桌面应用程序中,PCKE对于防止依赖于修改特定应用程序处理的URI方案的攻击特别有用,该攻击可能被劫持以重新路由授权响应并窃取授权代码。
这几天,即使它最初是为移动或桌面应用程序之类的公共应用程序设计的,我们也倾向于在机密服务器端应用程序中使用PKCE,以防止授权代码泄漏。在这种情况下,您绝对应该将其与客户端身份验证(即客户端机密验证)结合起来。