生产环境下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

