Google api 另一个401当使用带有admin SDK的服务帐户模拟超级管理员时
我正在尝试使用带有域范围委派的服务帐户和REST API访问Admin SDK目录API。我可以在不模拟用户的情况下成功获得承载令牌,但当我尝试使用“sub”密钥模拟用户时,我收到401“unauthorized_client”错误。从我在网上读到的所有内容(包括许多SO答案和其他地方),这表明我没有在我的GSuite管理控制台中批准该应用程序,但事实并非如此 以下是我迄今为止采取的步骤 1) 启用管理SDK 2) 在IAM和管理区域中,使用DwD创建服务帐户。 3) 在API&Services区域中,选择credentials并为我刚刚创建的服务帐户创建服务帐户密钥。 4) 下载私钥文件Google api 另一个401当使用带有admin SDK的服务帐户模拟超级管理员时,google-api,google-admin-sdk,Google Api,Google Admin Sdk,我正在尝试使用带有域范围委派的服务帐户和REST API访问Admin SDK目录API。我可以在不模拟用户的情况下成功获得承载令牌,但当我尝试使用“sub”密钥模拟用户时,我收到401“unauthorized_client”错误。从我在网上读到的所有内容(包括许多SO答案和其他地方),这表明我没有在我的GSuite管理控制台中批准该应用程序,但事实并非如此 以下是我迄今为止采取的步骤 1) 启用管理SDK 2) 在IAM和管理区域中,使用DwD创建服务帐户。 3) 在API&Servic
{
"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访问
6) 在“管理API客户端访问”中,为(3)中创建的客户端添加服务帐户ID和以下作用域
7) 确保我计划模拟的用户是“超级管理员”
当我试图生成承载令牌时,我收到一个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!
步骤6之后,您等待了多长时间?在进入管理控制台后获得访问权限有时可能需要几个小时。我发现了问题所在-是配置问题,而不是代码问题。在步骤6中,当我自动调整API客户机时,我输入了“服务帐户ID”,在我的例子中是:“编辑”-320@gsuite-编辑.iam.gserviceaccount.com”。虽然这似乎是可行的-正确的数字ID出现(如屏幕截图所示)-我得到了401个错误 但是,当我从私钥文件中输入“client_id”(在我的例子中是一个以0381结尾的数字)并使用相同的作用域时,我可以成功地进行身份验证
令人沮丧的是,输入服务帐户id没有引发错误,但结果很好。我已经这样做了,但仍然会遇到相同的“未经授权的客户端”错误。事实上,我已经尝试了来自网络的各种可能的建议组合,但最终还是得到了这条信息。这是令人难以置信的沮丧-实际上-刮擦,现在它的工作。我(再次)删除了只读作用域。这可能就像Jay Lee说的。很高兴你能成功。我同意这比它本应具有的挑战性要大得多。事实上,大约有十几份官方文件涵盖了这一过程,这并没有帮助。