如何在cron作业中通过OAuth2访问admin.directory.group?

时间:2013-12-24 19:12:00

标签: google-api google-admin-sdk

我正在尝试(并且失败)使用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的范围之一)。

我做错了什么?

2 个答案:

答案 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建议授予第三方访问权限,但是以不同的方式:

  1. 登录管理控制台
  2. 安全性 - >高级设置 - >身份验证 - > Mange第三方OAuth客户端访问
  3. 通过将Client Name设置为服务帐户的客户端ID,并将API范围设置为Admin SDK中的任何内容(例如https://www.googleapis.com/auth/admin.directory.group
  4. 来授权新客户端

    我需要做的其他事情是确保我的请求是代表管理用户进行的。使用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类成功拨打电话。