使用服务帐户检索用户信息时的Google Directory API:403

时间:2017-10-04 16:39:22

标签: google-admin-sdk

这可能与Google Directory API returns 403 for user_list with showDeleted=true有关,但遗憾的是我无法发表评论,而且我也没有回答。

我在获得许可的情况下从学校的G Suite收到了service account

https://www.googleapis.com/auth/admin.directory.user.readonly

G Suite管理员表示他已授予该帐户的域范围权限,并且我能够创建服务帐户JWT并检索访问令牌以使用HTTP / REST流程调用API。但是,当我致电user get endpoint以请求有关帐户的信息时

https://www.googleapis.com/admin/directory/v1/users/redacted%40redacted.com?projection=full

我收到以下内容:

The remote server returned an error: (403) Forbidden.
{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "forbidden",
        "message": "Not Authorized to access this resource/api"
      }
    ],
    "code": 403,
    "message": "Not Authorized to access this resource/api"
  }
}

我无法访问他们的G Suite管理面板,所以我无法自己动手,但管理员已经确认我们的客户可以访问admin.directory.user.readonly权限,他可以找到,如上所述,我们处于具有域范围访问权限的角色中。我愿意接受管理员可能缺少已分配权限的地方的建议,或者我的方法中可能缺少的任何内容(尽管JWT构建/签名和访问令牌检索似乎按预期工作)。如果我能提供任何其他有用的信息,请告诉我,我会更新。

更新:帐户的权限似乎是正确的 - 我能够从API Explorer中检索用户/获取的信息。但是,API Explorer正在使用URL

https://www.googleapis.com/admin/directory/v1/users/redacted%40redacted.com?projection=full&key={YOUR_API_KEY}

我找不到关键参数的任何文档,无论是在服务帐户还是用户/获取文档中。我在规范中定义的身份验证标头中包含access_token作为承载令牌,当我尝试将其作为密钥查询字符串参数发送时,我仍然收到上面记录的相同的403错误。 Stack(Google API Client users().get(userKey='name@domain.com') returns Not Authorized to access this resource/api)上有一个类似的问题没有答案。

2 个答案:

答案 0 :(得分:1)

没有玩过管理员SDK,但我建议检查Perform G Suite Domain-Wide Delegation of Authority,因为它专注于使用服务帐户。

  

将域范围的权限委派给您的服务帐户

     

您创建的服务帐户需要被授予访问权限   您要访问的G Suite域的用户数据。下列   任务必须由G Suite域管理员执行:

     
      
  1. 转到G Suite域的管理控制台。
  2.   
  3. 从控件列表中选择安全性。如果未看到列出的安全性,请从底部的灰色栏中选择更多控件   页面,然后从控件列表中选择安全性。
  4.   
  5. 从选项列表中选择高级设置。
  6.   
  7. 在“身份验证”部分中选择“管理API客户端访问”。
  8.   
  9. 在客户名称字段中输入服务帐户的客户ID。
  10.   
  11. 在“一个或多个API范围”字段中,输入应授予您的应用程序访问权限的范围列表(请参见下图)。对于   例如,如果您需要对用户和组进行域范围的访问,请输入:   https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.group
  12.   
  13. 单击“授权”按钮。
  14.         

    您的服务帐户现在可以通过Google域名访问Google管理员   适用于您域的所有用户的SDK Directory API。你准备好了   代表实例化授权的Admin SDK目录服务对象   您的G Suite域用户。

答案 1 :(得分:0)

您需要从谷歌控制台启用API访问

Dictionary API

Enable API