如何授权服务帐户访问Google Admin API

时间:2019-09-03 13:11:31

标签: google-api google-admin-sdk service-accounts

我们正在尝试与Google Admin SDK集成,以便能够在我们的域内检索,更新和创建帐户。但是,我们不断收到403错误,指示我们无权访问资源/ api。

我们正在使用从服务帐户获得的凭据,该服务帐户已启用域范围的授权并具有以下两个作用域: https://www.googleapis.com/auth/admin.directory.user.readonlyhttps://www.googleapis.com/auth/admin.directory.user。我们正在生成JWT(还包括这两个范围),然后向https://www.googleapis.com/oauth2/v4/token发送请求以检索访问令牌。

然后,我们使用访问令牌向https://www.googleapis.com/admin/directory/v1/users?domain=XXXX.com发送请求。我们将访问令牌作为Bearer令牌包括在标头中。 在响应中,我们收到以下消息:

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "forbidden",
                "message": "Not Authorized to access this resource/api"
            }
        ],
        "code": 403,
        "message": "Not Authorized to access this resource/api"
    }
}

是否有可能弄清楚我们做错了什么?

2 个答案:

答案 0 :(得分:1)

为此,您必须通过设置domain wide delegation来执行此操作,然后您的服务帐户才能访问有问题的数据。

  1. 在表中找到新创建的服务帐户。在“操作”下,单击more_vert,然后单击“编辑”。
  2. 在服务帐户详细信息中,单击expand_more显示域范围内的委派,然后确保选中“启用G Suite域范围内的委派”复选框。
  3. 如果您尚未配置应用的OAuth同意屏幕,则必须先进行配置,然后才能启用域范围的委派。请按照屏幕上的说明配置OAuth同意屏幕,然后重复上述步骤并重新选中该复选框。
  4. 单击“保存”以更新服务帐户,并返回到服务帐户表。可以看到一个新列,即“域范围委托”。点击查看客户ID,获取并记录客户ID。

答案 1 :(得分:0)

问题在于JWT必须包含sub字段:应用程序正在请求其委派访问权限的用户的电子邮件地址。