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

Flutter集成多OAuth权限范围的Google登录时遭遇「Access blocked: Authorization error, Error: Invalid_scope」授权拦截错误

Flutter集成多OAuth权限范围的Google登录时遭遇「Access blocked: Authorization error, Error: Invalid_scope」授权拦截错误

遇到这种Invalid_scope授权错误确实挺闹心的,我结合你的配置和代码帮你梳理下核心问题点和对应的解决办法:

一、最可能的元凶:Google Keep API的Scope限制

首先要敲黑板:Google Keep API目前是受限访问状态,普通开发者无法直接在Google Cloud Console中启用该API,也不能在OAuth请求中使用https://www.googleapis.com/auth/keep这个Scope——哪怕你在代码里加了这个Scope,Google的授权服务器也会直接判定为无效Scope,这大概率是你报错的核心原因。

你提到“Enabled Google Keep API (if available)”,但实际上这个API不对普通开放,只有获得Google官方邀请的开发者才能使用。所以第一步建议先移除代码中Keep相关的Scope,测试是否能正常完成授权。

二、排查OAuth同意屏幕的Scope配置

即使你在代码里声明了Scope,也必须在Google Cloud Console的OAuth同意屏幕中显式添加这些Scope,否则Google会拒绝授权:

  1. 进入Google Cloud Console → 你的项目 → API和服务 → OAuth同意屏幕
  2. 点击编辑应用,进入“范围”步骤
  3. 点击添加或移除范围,确保以下Scope都已添加:
    • .../auth/userinfo.email
    • .../auth/userinfo.profile
    • openid
    • .../auth/calendar
  4. 保存并发布同意屏幕(测试环境下发布到测试用户即可)

三、代码中Scope的写法优化

你的代码里混合使用了简写Scope(email、profile)和完整路径Scope,虽然google_sign_in包会自动将简写映射为完整路径,但为了避免潜在的冲突或识别问题,建议统一使用完整路径的Scope写法:

import 'package:google_sign_in/google_sign_in.dart';

class GoogleSignInService {
  static final GoogleSignIn _googleSignIn = GoogleSignIn(
    scopes: [
      'https://www.googleapis.com/auth/userinfo.email',
      'https://www.googleapis.com/auth/userinfo.profile',
      'openid',
      'https://www.googleapis.com/auth/calendar',
      // 暂时注释掉Keep的Scope,先验证其他功能
      // 'https://www.googleapis.com/auth/keep',
    ],
  );

  static Future<GoogleSignInAccount?> signIn() async {
    try {
      final GoogleSignInAccount? account = await _googleSignIn.signIn();
      return account;
    } catch (error) {
      print('Google Sign-In Error: $error');
      return null;
    }
  }
}

四、其他排查点

  1. 重复/冗余Scope检查:你的OAuth请求参数里同时出现了简写和完整路径的Scope(比如email和userinfo.email),虽然不会直接报错,但建议保持代码和请求参数的一致性。
  2. API启用状态确认:再次确认Google Calendar API确实已启用(进入API库搜索Calendar API,查看是否显示“已启用”)。
  3. 应用缓存清理:卸载并重装你的测试应用,清除旧的OAuth授权缓存,避免残留配置干扰。
  4. 测试用户验证:确保你用来测试的邮箱已添加到OAuth同意屏幕的测试用户列表中,未添加的邮箱会触发授权拦截。

验证步骤

  1. 先移除Keep相关的Scope,运行代码测试授权是否正常。
  2. 如果授权成功,说明问题确实出在Keep的Scope上,你可以考虑放弃集成Keep功能,或者通过Google的官方渠道申请Keep API的访问权限。
  3. 如果移除Keep后仍然报错,再检查Calendar的Scope是否已正确添加到OAuth同意屏幕,以及SHA-1指纹、包名是否完全匹配。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:29:35