Google API提示‘Not Authorized to access this resource/api’问题排查咨询
Google邮件组管理程序权限问题咨询
背景
我正在开发一款可添加/编辑/删除Google邮件组的程序,开发过程中多次遇到权限相关错误,已通过StackOverflow解决。当前Google Cloud的OAuth同意屏幕配置如下:
- 发布状态:测试
- 用户类型:外部
家用PC登录的是与应用访问数据不同域的个人Gmail账号,且不在OAuth同意屏幕的「测试邮箱」列表中,但程序能在Visual Studio正常运行;但部署到目标环境后,使用授权列表内的测试账号登录时,出现错误:
The service admin has thrown an exception. HttpStatusCode is forbidden. Not Authorized to use this resource/api
咨询问题
- 按配置家用环境本不应运行,为何非测试用户账号能正常运行?
- 部署后为何出现该授权错误?
代码补充
1. 加载云控制台下载的JSON文件
{ "installed":{ "client_id":"[snip].apps.googleusercontent.com", "project_id":"[snip]", "auth_uri":"https://accounts.google.com/o/oauth2/auth", "token_uri":"https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", "client_secret":"[snip]", "redirect_uris":["http://localhost"] } }
2. 创建Credential
Credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.FromStream(stream).Secrets, new[] { DirectoryService.Scope.AdminDirectoryGroup, PeopleServiceService.Scope.Contacts, DirectoryService.Scope.AdminDirectoryGroupMember, DirectoryService.Scope.AdminDirectoryUser }, "app@app.iam.gserviceaccount.com", CancellationToken.None);
3. 获取目录服务
var initializer = new BaseClientService.Initializer() { HttpClientInitializer = Credential, ApplicationName = "[snip]" }; DirService = new DirectoryService(initializer);
问题解答
问题1:非测试账号在家用环境正常运行的原因
你代码里用的是**服务账号(app@app.iam.gserviceaccount.com)**进行授权,而非当前登录的个人Gmail账号。GoogleWebAuthorizationBroker.AuthorizeAsync的第三个参数传入的是服务账号邮箱,实际是用服务账号的身份完成认证,和你登录的个人账号是否在测试列表无关。
另外,本地环境可能已经通过密钥文件、环境变量等方式给服务账号赋予了足够权限,或者服务账号本身已被授权访问目标域的目录数据,所以能正常操作。
问题2:部署后出现授权错误的原因
- 服务账号配置缺失:本地环境可能配置了服务账号的密钥文件或环境变量,但部署环境缺少这些配置,导致服务账号无法完成认证或权限不足。
- 域范围委派未配置:服务账号需要目标域管理员在Google Workspace中授予域范围委派权限,才能访问目录服务。如果部署环境的服务账号未完成该配置,或委派的权限范围和代码中请求的Scope不匹配,就会返回Forbidden错误。
- 重定向URI不匹配:你的JSON文件中重定向URI是
http://localhost,部署环境的实际URI可能不同,且未在Google Cloud控制台的OAuth客户端ID配置中添加对应URI,导致授权流程失败。 - OAuth同意屏幕测试限制:如果部署后程序触发OAuth流程而非直接使用服务账号密钥,测试状态的同意屏幕仅允许添加的测试账号授权,若部署环境的授权流程未正确适配测试账号范围,也会引发错误。
内容的提问来源于stack exchange,提问作者Betty Crokker
相关产品推荐
相关产品推荐

