iOS端Google Sign In后Python后端令牌验证遇redirect_uri_mismatch错误
Google Sign-In auth_code 转凭证时出现
redirect_uri_mismatch错误 问题详情
在Python FastAPI后端,尝试用iOS模拟器上Google Sign In(GIDSignIn)获取的auth_code提取凭证,代码如下:
credentials = client.credentials_from_clientsecrets_and_code( CLIENT_SECRET_FILE, ['https://www.googleapis.com/auth/calendar.readonly'], auth_code, )
持续收到错误:
oauth2client.client.FlowExchangeError: redirect_uri_mismatchBad Request
已尝试操作
- 已知
oauth2client库废弃,改用新版google-auth库的Flow方式,错误仍存在 - 反复核对Google官方iOS离线访问教程及Stack Overflow方案,检查重定向URL无效
- ID Token验证功能正常,代码如下:
verified_info = id_token_verifier.verify_oauth2_token(id_token, requests.Request(), CLIENT_ID)
凭证信息
- 后端OAuth凭证截图:

- iOS端OAuth凭证截图:

排查与解决步骤
禁止混用客户端凭证
iOS端生成的auth_code只能搭配iOS OAuth客户端凭证兑换,不能用后端Web客户端凭证。Google Sign-In的auth_code与生成它的客户端绑定,Web客户端和iOS客户端的重定向URI规则完全不同,混用必然触发不匹配错误。确认iOS端重定向URI配置
iOS端Google Sign-In默认重定向URI为com.googleusercontent.apps.{你的iOS客户端ID}:/oauth2callback,必须确保这个URI已添加到Google Cloud控制台对应iOS客户端的「已获授权的重定向URI」列表中。新版
google-auth库正确写法
加载iOS客户端的密钥文件,明确指定对应重定向URI:
from google_auth_oauthlib.flow import Flow # 注意:这里用iOS客户端的secret文件,不是后端Web的 flow = Flow.from_client_secrets_file( "ios_client_secret.json", scopes=['https://www.googleapis.com/auth/calendar.readonly'], redirect_uri="com.googleusercontent.apps.{你的iOS客户端ID}:/oauth2callback" ) # 兑换auth_code获取凭证 credentials = flow.fetch_token(code=auth_code)
- 校验auth_code有效性
auth_code仅能使用一次,重复调用会报错- iOS端获取
auth_code时必须请求offline_access权限,否则无法兑换可刷新的凭证 - 确保iOS模拟器的Bundle ID与Google Cloud控制台配置完全一致
内容的提问来源于stack exchange,提问作者Tejas Sharma
相关产品推荐
相关产品推荐

