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

Google OAuth发送JWT的机制及抓包未找到JWT问题解答

核心认知偏差纠正

OAuth2框架本身和JWT没有强制绑定关系,JWT只是OAuth2生态中常用的令牌格式之一,从来不是规范强制要求的返回内容。OAuth2本质是授权流程规范,只约定了授权、发牌的交互逻辑,没有规定令牌必须是JWT结构,不少平台的访问令牌本身就是无意义的随机字符串。
你跟着Spring官方教程实现的是标准授权码模式,这个模式下令牌默认不会直接暴露给前端浏览器,这是明确的安全设计,你在前端网络面板抓不到JWT是完全正常的。

前端抓包看不到JWT的原因

你贴的所有网络截图都是浏览器侧的流量,整个交互的前半段逻辑是:

  • 你在Google账号选择页选完账号后,Google不会直接把令牌返回给浏览器
  • Google只会生成一个一次性的授权码,通过302重定向把这个code传到你后端配置的回调地址
  • 后续真正换取令牌的请求,是你的Spring后端在服务端直接和Google的令牌服务交互的,这个请求完全不经过浏览器,你在浏览器开发者工具的网络面板里当然抓不到对应内容。
Google OAuth返回JWT的具体规则

Google不会默认返回JWT格式令牌,只有在你发起授权时请求了OpenID Connect相关权限(也就是scope包含openid),走OIDC身份认证流程时,才会返回JWT结构的id_token:

  1. 授权请求阶段在scope参数中加入openid、email、profile这类OIDC要求的权限范围
  2. 后端拿到前端传回的一次性授权码后,向Google的令牌端点发起换票请求,Google会在响应体中返回三类字段:
    • access_token:调用Google开放接口的访问令牌,默认是随机字符串,也可以手动配置为JWT格式
    • id_token:标准JWT格式的身份令牌,载荷中包含用户ID、邮箱、头像地址等身份信息,由Google官方签名校验
    • refresh_token:用于刷新过期访问令牌的长效令牌
  3. 上述响应是直接返回给你的Spring后端服务的,不会经过前端转发,要查看内容只能在后端代码打断点、打印服务端请求日志,或者手动构造授权流程请求才能拿到。
快速验证方法

你可以直接在Spring Security的OAuth2登录成功回调里加日志,打印拿到的OAuth2AuthenticationToken对象属性,就能找到Google返回的id_token字段,把字符串按.分割成三段分别做Base64解码,就能看到JWT的头、载荷、签名三部分完整结构。

补充:如果你没有配置openid权限范围,就算在服务端抓Google的令牌响应,也找不到JWT结构的内容,这是正常情况,不是代码配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:12:17