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

生产环境下Google OAuth授权同意页内部接口返回400/405错误的问题求助

生产环境下Google OAuth授权同意页内部接口返回400/405错误的问题求助

我正在为自己的Web应用实现基于PKCE的Google OAuth 2.0授权流程。目前OAuth请求生成环节完全正常,用户也能顺利选择自己的Google账号,但在Google内部处理同意页的阶段,他们的接口始终返回400或405错误,导致整个流程卡住,已经困扰我好几周了。

我已经尝试的排查步骤

  • 反复核对OAuth客户端配置,确保和Google Cloud Console里的设置完全一致
  • 分别测试了「测试中」和「已发布(生产环境)」两种发布状态
  • 验证了PKCE实现生成的是符合要求的base64url编码code challenge
  • 通过Google Search Console完成了域名所有权的验证
  • 确认生成的OAuth授权URL结构完全正确,以下是实际生成的授权URL:
https://accounts.google.com/o/oauth2/v2/auth?client_id=883635137330-78l4pfp088425ff0animo41m06idocnq.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fwww.ye-ye.app%2Fapi%2Fauth%2Fgoogle%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&response_type=code&state=tbw26VZV2_lbqvzZ2uXPzOxAU2B_ajhJ9S--9Tq3ZfE&code_challenge=xNjVLQy7YFtPtYZ6I8LqU9_rFZtVeX5lLmO422W_ZGw&code_challenge_method=S256&access_type=offline&prompt=consent

预期结果 vs 实际结果

  • 预期:用户能正常走完OAuth同意流程,最终被重定向回我的应用,同时携带授权码
  • 实际:用户选择账号后,同意页处理阶段直接失败。通过网络追踪发现Google内部多个接口报错,用户最终停留在「访问被阻止:授权错误」的页面。这个问题在不同浏览器中表现一致,没有任何缓解。

具体的错误请求及响应如下:

POST https://accounts.google.com/_/signin/oauth
响应:400 - [[["er",null,null,null,null,400,null,null,null,3,[{"48448350":["xsrf","AFoagUUtfgdhmlX0SdJudYDBdzcyfWvYWQ:1755873686127"]}]],["e",2,null,null,256]]]

POST https://accounts.google.com/_/OAuthUi/data/batchexecute
响应:405 - [[["er",null,null,null,null,405,null,null,null,9],["di",20],["af.httprm",19,"-7254146116102288166",8]]

POST https://accounts.google.com/signin/oauth/consent/approval
响应:400 - [[["er",null,null,null,null,400,null,null,null,3,[{"48448350":["xsrf","AFoagUUm1QJIgyeLDuYy6RHn1rHy9qgwiA:1755873810939"]}]],["e",2,null,null,256]]]

最小可复现代码(Python FastAPI 实现)

def get_authorization_url(self, state: str) -> tuple[str, str]:
    code_verifier = base64.urlsafe_b64encode(secrets.token_bytes(32)).decode('utf-8').rstrip('=')
    code_challenge = base64.urlsafe_b64encode(
        hashlib.sha256(code_verifier.encode('utf-8')).digest()
    ).decode('utf-8').rstrip('=')
    
    params = {
        'client_id': self.client_id,
        'redirect_uri': 'https://www.ye-ye.app/api/auth/google/callback',
        'scope': 'https://www.googleapis.com/auth/gmail.readonly https://www.googleapis.com/auth/gmail.send https://www.googleapis.com/auth/userinfo.email',
        'response_type': 'code',
        'state': state,
        'code_challenge': code_challenge,
        'code_challenge_method': 'S256',
        'access_type': 'offline',
        'prompt': 'consent'
    }
    auth_url = f"https://accounts.google.com/o/oauth2/v2/auth?{urlencode(params)}"
    return auth_url, code_verifier

我的OAuth客户端配置详情

  • 客户端类型:Web应用
  • 已授权的JavaScript来源:包含 https://www.ye-ye.app 和 https://ye-ye.app
  • 已授权的重定向URI:完全匹配 https://www.ye-ye.app/api/auth/google/callback
  • 发布状态:已发布(生产环境)
  • 域名已通过Google Search Console完成所有权验证

目前OAuth请求生成和初始重定向都正常,唯独Google的同意页处理环节在他们自己的内部接口上失败。想请教各位,这是Google OAuth基础设施的已知问题,还是我的配置/实现中存在没注意到的遗漏点?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:28:09