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

Mat*_*ter 7 google-admin-sdk

这可能与使用 showDeleted=true 的 Google Directory API 返回 403 for user_list 有关,但不幸的是,我无法发表评论,而且我没有提供答案。

我从学校的 G Suite获得了一个经过许可的服务帐号

https://www.googleapis.com/auth/admin.directory.user.readonly
Run Code Online (Sandbox Code Playgroud)

G Suite 管理员表示他已将域范围的权限委派给该帐户,并且我能够创建服务帐户 JWT 并检索访问令牌以使用 HTTP/REST 流调用 API。但是,当我调用用户获取端点以请求有关帐户的信息时 -

https://www.googleapis.com/admin/directory/v1/users/redacted%40redacted.com?projection=full
Run Code Online (Sandbox Code Playgroud)

我收到以下信息:

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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我无权访问他们的 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}
Run Code Online (Sandbox Code Playgroud)

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

Rey*_*cia 4

尚未使用 Admin SDK,但我建议检查执行 G Suite 域范围内的授权,因为它重点关注服务帐户的使用。

\n\n
\n

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

\n\n

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

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

您的服务帐户现在可以在域范围内访问您域中所有用户的 Google Admin\n SDK Directory API。您已准备好代表 G Suite 域的用户实例化授权的 Admin SDK 目录服务对象。

\n
\n