让AppEngine AppAssertionCredentials正常工作(Python)?

让AppEngine AppAssertionCredentials正常工作(Python)?,python,google-app-engine,google-admin-sdk,Python,Google App Engine,Google Admin Sdk,我正在将一个appenginepython项目从旧的Google Admin sdkapi更新为新的,并且很难对()进行身份验证 我已经 在开发人员控制台中启用管理SDK API 在Google应用程序仪表板中启用API访问 为了解决这个问题,我从开发者控制台创建了一个服务帐户,下载了credentials.json,并在Google Apps dashboard(安全>高级设置>管理API客户端访问)中为该帐户设置了以下权限(不带引号): 客户端:“{service account id

我正在将一个appenginepython项目从旧的Google Admin sdkapi更新为新的,并且很难对()进行身份验证

我已经

  • 在开发人员控制台中启用管理SDK API
  • 在Google应用程序仪表板中启用API访问
为了解决这个问题,我从开发者控制台创建了一个服务帐户,下载了credentials.json,并在Google Apps dashboard(安全>高级设置>管理API客户端访问)中为该帐户设置了以下权限(不带引号):

  • 客户端:“{service account id}.apps.googleusercontent.com”
  • 权限:“
我当前的代码是(略加修改)

这非常有效,但是如果可以的话,我希望通过使用
AppAssertionCredentials
调用来验证,从而消除credentials.json文件

但是,只要我运行以下代码:

# ...

import json
from google.appengine.api import memcache
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client.appengine import AppAssertionCredentials

GAPPS_CREDENTIALS = 'credentials.json'
GAPPS_SCOPES = [
  'https://www.googleapis.com/auth/admin.directory.user.readonly',
  'https://www.googleapis.com/auth/admin.directory.group.readonly',
  'https://www.googleapis.com/auth/admin.directory.group.member.readonly'
]
GAPPS_ADMIN = 'admin'
GAPPS_DOMAIN = 'domain.com'
GAPPS_USER = 'user'

# ...

credentials = AppAssertionCredentials(scope=GAPPS_SCOPES,sub=GAPPS_ADMIN+'@'+GAPPS_DOMAIN)
http = credentials.authorize(Http(memcache))
apps = build('admin', 'directory_v1', http=http)
user = apps.users().get(userKey=GAPPS_USER +'@'+GAPPS_DOMAIN ).execute()
console.log(user['email'])

# ...
我得到一个403错误:

<HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/users/user%domain.com?alt=json returned "Not Authorized to access this resource/api">

我怀疑问题可能是内置服务帐户未在Google Apps Dashboard中进行身份验证,但是我无法在开发者控制台或应用引擎控制台中找到帐户域以添加这些权限。我试过:

  • 添加在开发者控制台>权限下找到的所有服务帐户,将@developer.gserviceaccount.com更改为.apps.googleusercontent.com(@cloudservices.gserviceaccount.com帐户导致错误:
    此客户端名称尚未在谷歌注册。
  • 使用{project}.appspot.com域:Google Apps errors with
    此客户端名称尚未在Google注册。
有人能解释一下吗


感谢回答有关在何处查找App Engine默认服务帐户的电子邮件地址表单的问题:它位于新控制台中的“权限”->“服务帐户”(而不是API管理器”->“您自己创建的服务帐户的凭据”)下

现在回答主要问题:AppAssertionRedentials不适用于具有委托访问权的服务帐户,因为它适用于构造函数和(它不像SignedJWTAssertionRedentials那样用作关键字参数,现在已被忽略)。尽管如此,您仍然可以使用AppEngine默认服务帐户进行授权,因为新的控制台现在允许您进行授权


AppAssertionCredentials可能支持委托访问,为此,您可以在上发布功能请求。

您是否碰巧找到了解决方案?我发现自己也在同一条船上——可以使用脱机机密文件来完成这项工作,但无论我浏览了多少次和相关链接,我都找不到适用于默认服务帐户的客户端名称。不幸的是,没有,我必须坚持使用credentials.json文件。
<HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/users/user%domain.com?alt=json returned "Not Authorized to access this resource/api">