使用Google Directory API创建gmail组的权限不足

时间:2018-12-12 06:01:59

标签: python-3.x google-api google-oauth google-api-python-client google-directory-api

我要创建一个包含一些电子邮件/ gmails的组。我正在使用此guide。这是我用于创建组的代码:

SCOPES = 'https://www.googleapis.com/auth/admin.directory.group'
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid {
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
}
service = build('admin', 'directory_v1', http=creds.authorize(Http()))

mdig = createetag();

reqbody = {
    "kind": "admin#directory#group",
    "id": "id065468",
    "etag": "%s" % mdig,
    "email": "grpatest065469@gmail.com",
    "name": "Grptest name",
    "directMembersCount": "2",
    "description": "Grptest",
    "adminCreated": "True",
    "aliases": [
        "first@gmail.com",
        "second@gmail.com"
    ],
    "nonEditableAliases": [
    ]
}

# Call the Admin SDK Directory API
print('Creating new group')
group = service.groups()
g = group.insert(body=reqbody).execute()

我没有在浏览器中获得身份验证窗口,不确定是否是造成问题的原因。这是我的错误:

'kind': 'admin#directory#group', 'id': 'id065468', 'etag': "b'\\x9fR\\xe9O\\x93\\x84\\xbe~\\x19\\xef\\xd2DYJ`\\x1d'", 'email': 'grptest065469@gmail.com', 'name': 'Grptest name', 'directMembersCount': '2', 'description': 'Grp test', 'adminCreated': 'True', 'aliases': ['first@gmail.com', 'second@gmail.com'],'nonEditableAliases': []

Creating new group

Traceback (most recent call last):
File ".\creategrp.py", line 105, in <module> main()
File".\creategrp.py", line 75, in main 
    g = group.insert(body=reqbody).execute()
File "C:\dev\cfehome\lib\googleapiclient\_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
File "C:\dev\cfehome\lib\googleapiclient\http.py", line 849, in execute 
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/groups?alt=json returned "Insufficient Permission">

2 个答案:

答案 0 :(得分:2)

您使用的凭据没有权限。这是由与G Suite域范围委派和/或服务帐户凭据模拟(缺少)有关的一个或多个因素引起的。

  1. 您需要创建一个服务帐户。请勿修改或更改任何权限。
  2. 您需要将域范围的授权委派给服务帐户。
  3. 使用服务帐户凭据,您可以模拟另一个具有域超级管理员特权并且至少登录一次G Suite并接受条款和条件的用户。

从有关G Suite域委托的本文档开始:

Perform G Suite Domain-Wide Delegation of Authority

答案 1 :(得分:2)

Groups: insert需要https://www.googleapis.com/auth/admin.directory.group范围才能使用。最重要的是,您已通过身份验证的用户必须有权执行您尝试执行的操作。您的代码似乎使用了正确的范围。

  

“权限不足”

可以表示两件事之一。

  • 您要认证的用户无权执行您尝试做的事情
  • 自用户登录以来,您已经更改了范围。

选项一:

确保与您登录的用户对gsuite帐户具有管理员权限。或者您可能想在下面签出服务帐户。

选择二:

我不是python开发人员,但是我知道您正在使用的库。当用户在由stored store = file.Storage('token.json')表示的目录中登录该用户的凭证文件时。这样,当用户再次回来时,您不必要求他们再次登录。如果您更改了范围,则需要找到该文件并将其删除。它应该弹出并再次征求您的同意。

服务帐户

如果您希望在服务器端运行此命令,则可以使用service account并以此方式设置domain wide delegation,当脚本运行时,服务帐户将能够根据需要应用这些更改。但是,如果您看上去似乎只是在创建组,则尽管您登录的用户仍然具有访问权限,但创建服务帐户并进行设置的麻烦可能并不需要。

Google Api Python客户端文档-> Using OAuth 2.0 for Server to Server Applications