Android应用Google OAuth登录部分用户遇403 access_denied错误求助
Google Sign-In 403 access_denied 错误排查与验证表单说明
一、403 access_denied 错误的常见诱因
- 用户主动拒绝授权:部分用户在登录弹窗中点击了拒绝按钮,直接触发该错误
- OAuth验证未完成:你的应用面向外部用户,但未完成Google OAuth官方验证流程,未通过验证的应用仅允许「测试用户」列表内的账号登录,外部用户会被拦截
- 客户端ID配置失配:WEB_CLIENT_ID对应的Web应用客户端未正确关联Android应用的SHA-1指纹或包名,导致部分设备验证失败
- 用户账号安全限制:部分用户开启了严格的账号安全策略(如两步验证),或账号存在异常状态,无法完成授权
二、验证表单的位置与必要性
你提到的验证流程即Google OAuth应用验证,入口在Google Cloud Console的「API和服务」→「OAuth同意屏幕」页面。
- 你的代码中
DEFAULT_SIGN_IN默认包含email和profile范围,这两个属于Google定义的敏感范围,必须完成验证——未通过验证的应用,非测试用户会触发「Access blocked」拦截 - 即使你只需要邮箱信息,只要请求了敏感范围,就无法跳过验证流程
三、具体解决步骤
- 显式声明权限范围:修改代码明确请求邮箱权限,消除默认范围的潜在问题:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken(WEB_CLIENT_ID) .build();
- 完成OAuth同意屏幕验证:
- 登录Google Cloud Console进入对应项目,打开「OAuth同意屏幕」页面
- 填写应用名称、隐私政策URL、联系人邮箱等必填信息
- 提交验证申请,等待Google审核(周期通常为3-10个工作日)
- 校验客户端ID配置:
- 确认Web类型的客户端ID已绑定Android应用的SHA-1指纹和正确包名(在「OAuth客户端ID」详情页的「限制」板块配置)
- 检查AndroidManifest中的包名与Cloud Console配置完全一致
- 处理用户拒绝场景:在登录回调中捕获
access_denied错误,给用户提示“你已拒绝授权,请重新尝试登录” - 临时应急方案:将反馈问题的用户添加到「OAuth同意屏幕」的测试用户列表,可临时解决他们的登录问题
内容的提问来源于stack exchange,提问作者Nexussim Lements
相关产品推荐
相关产品推荐

