集成Android Management API遇权限异常:调用者无权管理项目
我刚加入团队,正在给现有项目集成Android Management API。已经添加了该API、创建了带权限的服务账号,还写了.NET项目做测试。给服务账号配置了Android Management User和Owner权限,但用.NET库创建enterprise时抛出异常:
The service androidmanagement has thrown an exception. HttpStatusCode is Forbidden. Caller is not authorized to manage project.
补充信息:
- 所用API密钥允许调用任意API
- 应用名称是临时名称,和项目名称不匹配
- 服务账号通过FileStream读取创建时下载的私钥.json文件
以下是基于官方示例编写的代码,错误在createRequst.Execute()处抛出:
string CreateEnterprise() { SignupUrlsResource.CreateRequest signupUrlRequest = managementService.SignupUrls.Create(); signupUrlRequest.ProjectId = cloud_project_id; signupUrlRequest.CallbackUrl = "https://www.yahoo.com"; var signupUrl = signupUrlRequest.Execute(); string enterpriseToken = signupUrl.Url; Console.WriteLine("Signup: " + enterpriseToken); EnterprisesResource.CreateRequest createRequest = managementService.Enterprises.Create(new Enterprise()); createRequest.ProjectId = "Test Project"; createRequest.SignupUrlName = signupUrl.Name; createRequest.EnterpriseToken = enterpriseToken; var enterprise = createRequest.Execute(); return enterprise.Name; }
排查与解决建议
修正ProjectId参数
代码里创建Enterprise时用的createRequest.ProjectId = "Test Project"是项目显示名称,Google API要求这里填项目ID(不是名称)。去Google Cloud控制台找到对应项目的ID,替换这个字符串,和前面创建signupUrl时用的cloud_project_id保持一致。验证服务账号权限绑定
确认服务账号的权限是绑定在目标Google Cloud项目上,而非其他项目。同时确保Android Management Service Owner或Android Management Service User权限已正确授予,权限生效可能需要几分钟同步时间,耐心等待后再重试。检查认证流程正确性
确保用服务账号的私钥完成OAuth 2.0认证,而非仅依赖API密钥。API密钥多用于公开数据的匿名访问,服务账号需要通过JWT令牌认证请求,确认你的.NET客户端正确加载了私钥文件并完成了完整认证流程。修正Enterprise Token的获取方式
enterpriseToken不是直接用signupUrl.Url,而是用户访问生成的signupUrl完成企业注册后,Google跳转至你指定的CallbackUrl时携带的enterpriseToken参数。正确流程是:- 生成signupUrl后,引导用户访问该URL完成注册
- 注册完成后从回调URL的参数中提取真实的
enterpriseToken - 用这个真实令牌调用Enterprises.Create接口
核对应用与项目的关联
确认你的.NET应用所使用的OAuth客户端已关联到目标Google Cloud项目,避免因项目不匹配导致权限校验失败。
内容的提问来源于stack exchange,提问作者Maximilian Hung

