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

Azure ADB2C Google注册报错AADB2C90090:JWE不是有效5段令牌

问题核心表现
  • 场景:React Native 应用内嵌 WebView 调用 Azure AD B2C SignInSignUp 用户流,配置Google作为第三方身份提供商
  • 异常:用户完成Google侧注册/授权操作后,回调URL的code字段返回Google原生授权码,而非B2C签发的格式化令牌;解析StateProperties字段时抛出错误:AADB2C90090: The provided JWE is not a valid 5 segment token.
  • 对照基线:同用户流下,Apple身份提供商注册、B2C本地账号“立即注册”流程均能返回格式合规、可通过服务端校验的令牌
  • 报错本质:B2C的令牌解析逻辑收到了非自身签发的code值,不符合JWE 5段结构(头、载荷、加密密钥、初始化向量、认证标签)要求,和令牌解析逻辑本身无关
根因范围

由于Apple、本地账号流程完全正常,可直接排除B2C用户流本身的令牌签发逻辑、应用端回调解析逻辑的问题,故障锁定在Google身份提供商的双边配置、授权链路跳转环节:

  • 最常见原因:Google Cloud Console 中OAuth客户端的授权重定向URI配置错误,Google授权完成后没有将授权码发送给B2C的令牌交换端点,直接回传给了客户端WebView,B2C没有完成「Google授权码→B2C令牌」的兑换流程
  • 次常见原因:B2C侧Google身份提供商配置错误(客户端ID/密钥不匹配、响应类型选错、作用域配置异常),导致B2C拿到Google授权码后无法向Google令牌端点发起兑换请求,流程异常中断后直接透传了原始Google授权码
  • 特殊场景:WebView拦截了B2C域的跳转请求、阻止了第三方Cookie,导致B2C会话丢失,无法完成授权码兑换流程;或新建Google OAuth客户端存在配置同步延迟,导致B2C换令牌请求被Google拒绝
排查步骤(按优先级排序)
  1. 核对双边重定向配置
    • 进入Google Cloud Console对应OAuth 2.0客户端配置页,确认授权重定向URI严格匹配B2C Google IdP配置页给出的官方回调地址,格式为https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/oauth2/authresp,无多余斜杠、大小写错误、后缀参数
    • 确认没有混用调试/发布版Google OAuth客户端ID,安卓端需确认包名、SHA1签名和客户端配置完全匹配
  2. 核对B2C侧Google IdP配置
    • 确认客户端ID、客户端密钥与Google Cloud Console中值完全一致,无前后空格、复制错误
    • 确认作用域仅勾选openid、email、profile三个基础项,未添加Google专属非标准作用域
    • 确认响应类型配置为code(授权码流),未勾选隐式流直接返回id_token/access_token的选项
  3. 链路校验
    • 开启React Native WebView请求日志,跟踪Google授权完成后的跳转路径:正常流程为Google 302跳转至B2C的authresp端点,再由B2C跳转至应用配置的回调地址;如果Google授权后直接跳转到应用回调地址,可直接判定为重定向URI配置错误
    • 查看B2C审计日志,确认Google IdP登录流程的失败节点,定位是否存在「授权码兑换失败」「客户端凭证无效」类明确报错
  4. WebView配置校验
    • 确认WebView未拦截b2clogin.com、google.com域下的跳转请求
    • 确认未开启全局阻止第三方Cookie配置,B2C完成Google授权码兑换依赖跨域Cookie传递
可直接落地的解决方案
  • 配置类问题:修正重定向URI、客户端ID/密钥后,等待5-10分钟让B2C、Google双侧配置生效后重新测试;新建Google OAuth客户端存在最长1小时的配置同步延迟,等待后重试即可
  • WebView配置修正参考:
    <WebView
      source={{ uri: b2cLoginEndpoint }}
      sharedCookiesEnabled={true}
      thirdPartyCookiesEnabled={true} // 安卓端必须开启,否则跨域Cookie丢失
      onShouldStartLoadWithRequest={(event) => {
        // 仅拦截最终跳转到应用自定义Scheme的回调,不要拦截B2C、Google域的中间跳转
        if (event.url.startsWith('yourscheme://auth-callback')) {
          handleB2cTokenResponse(event.url)
          return false
        }
        return true
      }}
    />
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:21:20