采用PKCE的授权码流程:原生/SPA的AccessToken响应是否会被窃取?
PKCE流程中Access Token的捕获风险解析
原生应用场景
带PKCE的授权码流程核心是防止授权码被拦截冒用——只有持有初始生成的code_verifier的客户端,才能用授权码兑换access token。但关于access token的响应是否会被恶意应用捕获,要分情况看:
- 如果token的传输采用HTTPS,网络层面的窃听是不可能的,恶意应用无法通过抓明文包获取token。
- 但如果设备处于越狱/root状态,恶意应用拥有系统级权限,它可以通过hook系统网络调用、读取目标应用内存等方式获取到token。这种本地权限滥用的场景,PKCE无法防护,因为PKCE的设计目标不包含抵御本地高权限攻击,这类风险需要依赖系统安全机制和应用自身的安全存储策略(比如用系统提供的密钥链存储token)来缓解。
单页Web应用(SPA)场景
SPA实现PKCE后,浏览器扩展确实有可能捕获到包含access token的响应,原因如下:
- SPA兑换token的请求是在浏览器端发起的(通常是fetch/XHR请求),如果某个浏览器扩展拥有目标授权服务器API域名的主机权限,它就能通过监听浏览器的网络请求,直接获取到响应中的access token。
- PKCE同样只解决授权码被拦截冒用的问题,无法解决SPA前端token的存储与泄露风险。SPA的token通常存于内存或localStorage中,除了有权限的浏览器扩展,XSS攻击也能窃取到token。这类风险需要通过其他手段补充防护,比如采用后端托管的token模式(将token存在HttpOnly Cookie中)、严格控制浏览器扩展权限、启用Content Security Policy(CSP)等。
内容的提问来源于stack exchange,提问作者thedreamsaver
相关产品推荐
相关产品推荐

