使用带有Admin SDK的服务帐户模拟超级管理员时的另一个401

时间:2018-04-05 10:02:31

标签: google-api google-admin-sdk

我尝试使用具有域范围委派和REST API的服务帐户访问Admin SDK Directory API。我可以在不冒充用户的情况下成功获得持有人令牌,但是我可以用一个" sub"来冒充用户。密钥,我收到401," unauthorized_client"错误。从我在线阅读的所有内容(包括众多SO答案和其他地方),这表明我还没有在我的GSuite管理控制台中批准该应用程序,但事实并非如此。

以下是我目前采取的步骤。

1)启用Admin SDK enter image description here

2)在IAM&管理区域,使用DwD创建服务帐户。 enter image description here

3)在Apis&服务区域,为刚刚创建的服务帐户选择凭据并创建服务帐户密钥。 enter image description here

4)下载私钥文件。

{
  "type": "service_account",
  "project_id": "gsuite-REDACTED",
  "private_key_id": "------3d2e",
  "private_key": "REDACTED",
  "client_email": "REDACTED-320@gsuite-REDACTED.iam.gserviceaccount.com",
  "client_id": "-----0381",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/REDACTED-320%40gsuite-REDACTED.iam.gserviceaccount.com"
}

5)在admin.google.com中启用API访问权限 enter image description here

6)在"管理API客户端访问"为(3)中创建的客户端添加服务帐户ID和以下范围 enter image description here

7)确保我计划模仿的用户是超级管理员" enter image description here

当我尝试生成承载令牌时,我收到401错误

{
 "error": "unauthorized_client",
 "error_description": "Client is unauthorized to retrieve access tokens using this method."
}

我尝试使用各种库但总是有相同的结果,所以我猜这与我的应用配置有关,而不是我的代码实现。非常感谢任何帮助。例如,我在这里使用Ruby:

require 'googleauth'

scopes = ['https://www.googleapis.com/auth/admin.directory.user',
                'https://www.googleapis.com/auth/admin.directory.group']

authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open("gsuite.json"),
  scope: scopes).dup

authorizer.sub = 'joe@-----.io'
puts authorizer.fetch_access_token!

2 个答案:

答案 0 :(得分:1)

我想出了问题 - 这是配置而不是代码。在步骤6中,当我自动化API客户端时,我输入了“服务帐户ID”,在我的情况下:“REDACTED-320@gsuite-REDACTED.iam.gserviceaccount.com”。虽然这似乎有效 - 但是出现了正确的数字ID(如屏幕截图所示) - 我收到了401错误。

但是,当我从我的私钥文件输入“client_id”时,在我的情况下,一个以0381结尾的数字,并使用相同的范围,那么我可以成功进行身份验证。

输入服务帐户ID并没有引发错误令人沮丧。但是一切都很顺利。

答案 1 :(得分:0)

你在第6步之后等了多久?在进入管理控制台后进入访问权限有时可能需要几个小时。