来自带有AppAssertionCredentials的Google Admin SDK出现403错误

时间:2017-02-15 07:35:57

标签: python google-app-engine google-admin-sdk google-directory-api

我试图通过Google管理目录API列出用户。

import logging
import os

from google.appengine.api import memcache
from googleapiclient import discovery
from oauth2client.contrib.appengine import AppAssertionCredentials

import httplib2

from flask import Flask


credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/admin.directory.user')
auth_http = credentials.authorize(httplib2.Http(cache=memcache))
service = discovery.build('admin', 'directory_v1', http=auth_http)    

@app.route('/list')
def list():
    results = service.users().list(domain='example.com', maxResults=10, orderBy='email').execute()
    return 'success'

app = Flask(__name__)

我在App Engine中运行此功能,并按照https://developers.google.com/api-client-library/python/auth/service-accounts

中的说明为App Engine默认服务帐户启用了域范围的委派

这是我得到的错误: HttpError:https://www.googleapis.com/admin/directory/v1/users?orderBy = email& domain = example.com& salt = json& amp ; maxResults = 10返回"未授权访问此资源/ api">

1 个答案:

答案 0 :(得分:2)

按照Delegating domain-wide authority to the service account

中指示的步骤操作

然后,G Suite域管理员必须完成以下步骤:

  1. 转到G Suite域的管理控制台。
  2. 从控件列表中选择安全性。如果未列出“安全性”列表,请从页面底部的灰色栏中选择“更多控件”,然后从控件列表中选择“安全性”。如果您看不到控件,请确保以域管理员身份登录。
  3. 从选项列表中选择显示更多,然后选择高级设置。
  4. 在“身份验证”部分中选择“管理API客户端访问”。
  5. 在“客户名称”字段中,输入服务帐户的客户端ID。您可以在“服务帐户”页面中找到服务帐户的客户端ID。
  6. 在“一个或多个API范围”字段中,输入应授予应用程序访问权限的范围列表。例如,如果您的应用需要对Google Drive API和Google Calendar API进行全域访问,请输入:https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/calendar
  7. 点击授权。
  8. 确保您的服务帐户设置为管理员。