我正在尝试为营销目的设置一个Google网上论坛,当某些用户注册我的应用程序时,我会使用以下代码将其电子邮件发送到该Google网上论坛
# google_admin_apis.py
def add_member(member):
if not member.email:
return False
try:
service = build('admin', 'directory_v1')
except DefaultCredentialsError: # For developers
return False
group_key = 'mygroup@mydomain.com'
body = {
"email": member.email
}
members = service.members()
request = members.insert(groupKey=group_key, body=body)
response = request.execute()
return True
我的应用程序托管在Google App Engine上,因此在服务器上运行时默认为ADC will use the default service account。我尝试使用gcloud auth application-default-account登录并使用我的G Suite管理员帐户以及我的个人帐户(均为GCP项目的所有者)登录并在本地运行此代码。失败之后,我进行了一些研究并意识到,要使OAuth2能够访问我的G Suite用户数据(我实际上不是通过插入用户来访问任何内容?!?),我必须在默认服务上“启用域范围委派”帐户,因此我执行了此操作,然后下载了服务帐户JSON,并尝试使用$ GOOGLE_APPLICATION_CREDENTIALS进行手动授权,但仍获得403。然后,我又走了一步,紧跟these instructions。授予我的客户ID访问https://www.googleapis.com/auth/admin.directory.group和group.member的权限。
毕竟,我仍然收到403错误。
使用应用程序默认凭据,我得到:
<HttpError 403 when requesting
https://www.googleapis.com/admin/directory/v1/groups/groupKey/members?alt=json
returned "Insufficient Permission">
当通过带有激活服务帐户的.json或GOOGLE_APPLICATION_CREDENTIALS使用App Engine默认服务帐户时,我得到:
<HttpError 403 when requesting
https://www.googleapis.com/admin/directory/v1/groups/groupKey/members?alt=json
returned "Not Authorized to access this resource/api">
(严格审查了groupKey)
简而言之,我有一个具有域范围委派的应用程序引擎默认服务帐户,并已授予它的客户端ID对目录API的member.insert()函数所需的两个角色的访问权限,但仍然不允许我调用上面的API。
任何帮助将不胜感激。
答案 0 :(得分:0)
我按照本教程https://developers.google.com/admin-sdk/directory/v1/quickstart/python的操作,使用Google的google_auth_oauthlib在本地运行类似的功能来设置OAuth2凭据
service = build('admin', 'directory_v1', credentials=creds)