You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

授权码注入攻击针对哪些客户端?为何仅针对机密客户端?公共客户端呢?

关于授权码注入攻击与客户端类型的疑问解答

为什么授权码注入攻击仅针对机密客户端?

授权码注入攻击的核心逻辑是:攻击者窃取受害者的授权码后,将这个代码注入到自己和客户端的会话中,冒充受害者获取令牌。这种攻击能成立的前提是客户端可以脱离用户会话的绑定,单独用授权码向授权服务器换取令牌——而只有机密客户端(比如后端服务、桌面应用)具备这个条件:

  • 机密客户端拥有仅自己和授权服务器知晓的客户端密钥,换取令牌时会用密钥做身份验证,授权服务器不会额外校验授权码是否和当前用户的会话(比如state参数、会话Cookie)强绑定;
  • 攻击者只要拿到有效的授权码,就能在自己的会话里提交给客户端,客户端会用密钥去换令牌,不会怀疑这个授权码不是当前会话生成的。

而公共客户端(比如单页应用SPA、原生移动APP)没有客户端密钥,必须使用PKCE(授权码流程的扩展)来安全换取令牌:

  • 公共客户端在发起授权请求前会生成code_verifier(随机字符串),并将其哈希后的code_challenge发给授权服务器;
  • 换取令牌时必须提交对应的code_verifier,授权服务器会验证哈希是否匹配。
    攻击者就算窃取到授权码,没有对应的code_verifier也换不到令牌,所以授权码注入攻击对公共客户端完全无效。

公共客户端是否会成为授权码拦截攻击的目标?

会,但攻击的成功率和危害取决于客户端的实现:

  • 如果公共客户端没有正确启用PKCE,攻击者通过钓鱼、中间人攻击等手段拦截到授权码后,就能直接用它换取令牌,这种情况下公共客户端就是授权码拦截攻击的目标;
  • 如果公共客户端严格实现了PKCE,即使攻击者拦截到授权码,因为没有对应的code_verifier,也无法完成令牌换取,能有效抵御这类攻击。

另外,公共客户端还可能面临其他变种的授权码相关攻击,比如XSS窃取当前用户会话中的授权码(如果客户端在回调后没有立即清理授权码参数),但这属于会话劫持的范畴,和传统的授权码注入/拦截攻击逻辑不同。

内容的提问来源于stack exchange,提问作者David Klempfner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:22:14