我要创建一个包含一些电子邮件/ 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">
答案 0 :(得分:2)
您使用的凭据没有权限。这是由与G Suite域范围委派和/或服务帐户凭据模拟(缺少)有关的一个或多个因素引起的。
从有关G Suite域委托的本文档开始:
答案 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