我正在尝试(并且失败)使用OAuth2通过命令行脚本调用admin.directory.group范围。我尝试配置服务帐户来执行此操作,但收到此错误消息:
调用GET https://www.googleapis.com/admin/directory/v1/groups/foo%40example.com时出错:(403)未授权访问此资源/ api
我还尝试使用“已安装”的应用程序类型,采用手动步骤获取授权代码,然后获取刷新令牌,但出现Not Authorized
错误。
我确实选中了“启用API访问权限”,并在我的项目中启用了“Admin SDK”(虽然奇怪的是它没有将admin.directory.group
列为Admin SDK的范围之一)。
我做错了什么?
答案 0 :(得分:1)
您是否在管理控制台中添加了客户端ID以授予Admin SDK第三方客户端oauth访问权限?
以下是有关如何为任务API执行此操作的说明:
https://developers.google.com/google-apps/help/articles/2lo-in-tasks-for-admins#manage
对于Admin SDK应该类似,但您必须将Admin SDK作为范围
答案 1 :(得分:1)
我终于使用服务帐户启用此功能。我确实必须以Emily Lam建议授予第三方访问权限,但是以不同的方式:
Client Name
设置为服务帐户的客户端ID,并将API范围设置为Admin 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
类成功拨打电话。