使用服务帐户在Google Directory中插入用户

时间:2016-06-28 15:56:40

标签: google-api google-admin-sdk

我写了一个PHP应用程序,试图在我的Google目录中创建一个用户。我不使用Google图书馆。我成功向Android Enterprise API发出请求。我可以使用我的MSA注册和取消注册企业服务帐户。所以我假设我的JWT和请求代码工作。

我创建了一个服务帐户并启用了“域名广泛授权”,并在“管理API客户端访问”窗口下向我的API客户端添加了以下权限“https://www.googleapis.com/auth/admin.directory.userhttps://www.googleapis.com/auth/admin.directory.group”。 我的服务帐户在“项目权限”窗口中具有状态角色“编辑器”。

首先,我的脚本从Google服务器获取Bearer令牌,为此我创建了一个JWT并使用我的私钥加密它。 令牌包含以下字段

"iss" => sacname@projectname.iam.gserviceaccount.com
"scope" => "https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.group"
"aud" => "https://www.googleapis.com/oauth2/v4/token",
"exp" => timestamp+3000,
"iat" => timestamp

当我执行该请求时,我获得了一个不记名令牌,但是当我使用该令牌发出插入请求时,我总是会收到消息“未授权访问此资源/ api”并使用HTTP 403。 当我将字段“sub”添加到我的JWT并指定项目管理员“admin@mydomain.com”的电子邮件时,我甚至无法获得持有者令牌,然后我收到401错误,并显示以下消息“未经授权的客户端或请求中的范围。“

之后我尝试了一些“简单”的东西,我只想获得目录中所有用户的列表。但是Google服务器只是因为“错误请求”错误而回应。我在API页面上的API Explorer遇到了同样的错误。也许API坏了?至少API Explorer应该可以工作。 https://developers.google.com/admin-sdk/directory/v1/reference/users/list

您是否知道我无法使用我的服务帐户创建用户?

(我必须在范围和网址中插入一些空格,因为我不允许发布两个以上的链接)

问候 菲利普

2 个答案:

答案 0 :(得分:0)

您是否知道我无法使用我的服务帐户创建用户?

是。您的服务帐户似乎无权创建用户。检查您的服务帐户在GDC中的角色,以检查它是否为所有者,编辑者,查看者等。他们可以做的范围取决于此。观看此Google video进行现场演示。

另外,请尝试在Using OAuth 2.0 for Server to Server Applications上阅读更多内容。

答案 1 :(得分:0)

添加sub声明是正确的做法,因为您必须模拟超级管理员才能使用Directory API。如果您收到“未经授权的客户端或请求中的范围”响应,则可能是由于您用于授权(或范围)的服务帐户客户端ID中有错字,或者没有经过足够的时间(通常会在几分钟,但最多可能需要24个小时。

有关可能的错误和原因的更多详细信息,请参见JWT error codes