这可能与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)上有一个类似的问题没有答案。
答案 0 :(得分:1)
没有玩过管理员SDK,但我建议检查Perform G Suite Domain-Wide Delegation of Authority,因为它专注于使用服务帐户。
将域范围的权限委派给您的服务帐户
您创建的服务帐户需要被授予访问权限 您要访问的G Suite域的用户数据。下列 任务必须由G Suite域管理员执行:
- 转到G Suite域的管理控制台。
- 从控件列表中选择安全性。如果未看到列出的安全性,请从底部的灰色栏中选择更多控件 页面,然后从控件列表中选择安全性。
- 从选项列表中选择高级设置。
- 在“身份验证”部分中选择“管理API客户端访问”。
- 在客户名称字段中输入服务帐户的客户ID。
- 在“一个或多个API范围”字段中,输入应授予您的应用程序访问权限的范围列表(请参见下图)。对于 例如,如果您需要对用户和组进行域范围的访问,请输入:
https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.group
- 单击“授权”按钮。
醇>您的服务帐户现在可以通过Google域名访问Google管理员 适用于您域的所有用户的SDK Directory API。你准备好了 代表实例化授权的Admin SDK目录服务对象 您的G Suite域用户。
答案 1 :(得分:0)