【发布时间】:2019-02-10 17:17:31
【问题描述】:
我正在尝试设置一个用于营销目的的 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 login 并使用我的 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 与 activate-service-account 或通过 GOOGLE_APPLICATION_CREDENTIALS 使用应用引擎默认服务帐户时,我得到:
<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 授予对 Directory API 的 member.insert() 函数所需的两个角色的访问权限,但我仍然不能调用API 同上。
任何帮助将不胜感激。
【问题讨论】:
-
您找到解决方案了吗?到目前为止,我发现的唯一解决方案是创建一个新的服务帐户凭据并使用它来代替默认的应用引擎。
-
我一直没弄明白,但回想起来,我认为服务帐户是解决方案,当时我犹豫要不要使用它们,但现在有了更多经验,这似乎是合理的接近。
标签: google-app-engine oauth-2.0 google-api google-cloud-platform google-workspace