我正在尝试(但失败)使用OAuth2通过命令行脚本调用admin.directory.group范围。我尝试配置服务帐户来执行此操作,但收到以下错误消息:
调用 GET https://www.googleapis.com/admin/directory/v1/groups/foo%40example.com 时出错:(403) 无权访问此资源/API
我还尝试使用"已安装"应用程序类型,手动获取授权代码并随后获取刷新令牌,但遇到了相同的Not Authorized
错误。
我确实选中了"启用 API 访问",并且在我的项目中也启用了"管理员 SDK"(尽管奇怪的是它没有将admin.directory.group
列为管理员 SDK 的范围之一)。
我做错了什么?
您是否在管理控制台中添加了客户端 ID 以授予 Admin SDK 第三方客户端访问权限?
以下是有关如何为任务 API 执行此操作的说明:
https://developers.google.com/google-apps/help/articles/2lo-in-tasks-for-admins#manage
它应该与管理员 SDK 类似,但您必须将管理 SDK 作为范围
我终于使用服务帐户让它工作了。我确实必须按照Emily Lam的建议授予第三方访问权限,但通过不同的方式:
- 登录管理控制台
- 安全 -> 高级设置 -> 身份验证 ->管理第三方 OAuth 客户端访问
- 通过将
Client Name
设置为服务帐户的客户端 ID 来授权新客户端,并将 API 范围设置为管理员 SDK 所需的任何内容(例如,https://www.googleapis.com/auth/admin.directory.group
我需要做的另一件事是确保我的请求是代表管理用户发出的。使用 PHP API,设置凭据对象如下所示:
$cred = new Google_Auth_AssertionCredentials(
$clientEmail,
'https://www.googleapis.com/auth/admin.directory.group',
file_get_contents($keyFile));
$cred->sub = 'admin@example.com';
现在,我能够使用 Google_Service_Directory
类成功拨打电话。