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

react-native-app-auth接入谷歌OAuth时安卓端报Invalid ID Token错误如何解决

问题成因
  • react-native-app-auth 6.x版本安卓端默认启用ID Token校验逻辑,即便你没有主动要求获取ID Token,只要你请求的scope包含profile、email这类会触发谷歌返回ID Token的字段,库就会自动对返回的ID Token做合法性校验,校验失败就会抛出对应错误。
  • 最常见的偶发诱因是安卓测试设备的系统时间和标准网络时间存在偏差,偏差超过5分钟就会导致JWT的有效期校验失败,首次调试时设备时间正常,后续可能因为设备离线、时区手动修改等原因导致时间偏移触发校验失败。
  • 安卓端Client ID对应的签名配置不匹配:如果项目后续的签名配置(比如debug.keystore被替换、打包类型从debug切换为release)发生变更,和谷歌云后台配置的安卓Client ID绑定的SHA-1签名不一致,也会导致返回的ID Token校验失败。
  • react-native-app-auth 6.4.0版本的安卓底层依赖AppAuth-Android存在已知的ID Token校验兼容问题,部分场景下合法的ID Token也会被误判为无效。
解决方案
  • 优先校验测试设备的系统时间:把设备时间设置为自动同步网络时间,确认时区正确后重试,80%以上的偶发Invalid ID Token问题都是该原因导致。
  • 如果时间同步后仍报错,且你的业务不需要使用ID Token,可以直接在认证配置中新增skipIdTokenValidation: true参数,主动关闭安卓端的ID Token校验逻辑,修改后的配置参考如下:
const config = {
  issuer: 'https://accounts.google.com',
  clientId: Platform.select({ios: IOS_CLIENT_ID, android: ANDROID_CLIENT_ID})!,
  redirectUrl: Platform.select({ios: IOS_REDIRECT_URI, android: ANDROID_REDIRECT_URI})!,
  scopes: ['https://mail.google.com/', "profile", "email"],
  // 新增参数,安卓端跳过ID Token校验,iOS端添加该参数无副作用
  skipIdTokenValidation: true
};

如果需要保留ID Token校验逻辑,可以在配置中新增additionalParameters: { prompt: 'select_account' },强制拉起账号选择页,清除之前的无效会话缓存后重试。

  • 检查安卓端Client ID配置:确认谷歌云后台对应安卓Client ID绑定的SHA-1签名,和当前项目打包使用的签名SHA-1完全一致,debug环境和release环境需要分别配置对应的Client ID。
  • 如果以上方案都无效,可以升级react-native-app-auth到7.0.0及以上版本,该版本修复了安卓端ID Token校验的已知bug,升级时注意同步对应版本要求的原生配置修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:07