Google Directory API:使用服务帐户检索用户信息时出现 403
Posted
技术标签:
【中文标题】Google Directory API:使用服务帐户检索用户信息时出现 403【英文标题】:Google Directory API: 403 when retrieving user information with service account 【发布时间】:2018-03-16 03:33:54 【问题描述】:这可能与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
而且我在服务帐户或用户/获取文档中都找不到任何关于 key 参数的文档。我将 access_token 作为不记名令牌包含在规范中定义的身份验证标头中,当我尝试将其作为密钥查询字符串参数发送时,我仍然收到上面记录的相同 403 错误。 Stack (Google API Client users().get(userKey='name@domain.com') returns Not Authorized to access this resource/api) 上有一个类似的问题没有答案。
【问题讨论】:
【参考方案1】:没有玩过 Admin 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 管理员 适用于您域中所有用户的 SDK 目录 API。你准备好了 代表实例化授权的 Admin SDK 目录服务对象 您的 G Suite 域的用户。
【讨论】:
【参考方案2】:您需要从谷歌控制台启用 API 访问
Dictionary API
Enable API
【讨论】:
感谢您的建议。管理员提供的屏幕截图显示这些设置已启用。您对我们可以尝试的后续步骤有什么建议吗?以上是关于Google Directory API:使用服务帐户检索用户信息时出现 403的主要内容,如果未能解决你的问题,请参考以下文章
Google_Service_Directory - (403) 无权访问此资源/api
无法使用 Google Directory API Admin SDK 列出用户
使用 Google Directory API 未找到组织单元
周末 Google Directory API 发生了啥变化/中断?