我发现的几乎所有地方都说PKCE是Client Secret的替代品,应由本机应用程序使用。
当然不。PKCE和客户端身份验证是两个附加但完全独立的措施:
客户端身份验证-通常由服务器端客户端使用-保证只有颁发了授权代码的客户端应用程序才能兑换它。采取这种安全措施后,即使资源所有者本人也无法兑现自己的代码。
PKCE保证只有发起授权请求的客户端才能发送有效的令牌请求,因为授权代码已绑定到初始代码质询/验证器,而初始代码质询/验证器仅由生成该请求的合法客户端知道。对于移动/桌面应用程序,PCKE对于防止依赖于修改由特定应用程序处理的URI方案的攻击特别有用,该攻击可能被劫持以重新路由授权响应并窃取授权代码。
如今,即使它最初是为移动或桌面应用程序之类的公共应用程序设计的,我们也倾向于在机密服务器端应用程序中使用PKCE,以防止授权代码泄漏。在这种情况下,您绝对应该将其与客户端身份验证(即客户端机密验证)结合使用。