0

我从 Google 的一些 App Engine 示例代码开始。

我的应用需要使用 Google Admin SDK 中的 Directory API 和 Reports API。

我在 API 控制台中创建了一个项目,并在服务中打开了 Admin SDK。

我将范围(与以下代码中使用的范围相同)添加到我域的 Google cpanel 中高级工具的“管理 API 客户端访问”部分。

对 Directory API 的调用有效。

之后,对 Reports API 的调用失败并显示错误消息:

“HttpError:https://www.googleapis.com/admin/reports/v1/activity/users/all/applications/admin?alt=json 返回“权限不足”>

非常感谢您的帮助。

import webapp2
import os
from apiclient.discovery import build
from oauth2client.appengine import OAuth2Decorator
from oauth2client.appengine import OAuth2DecoratorFromClientSecrets
from apiclient import errors
import logging
import json

decorator = OAuth2DecoratorFromClientSecrets(
  os.path.join(os.path.dirname(__file__), 'client_secrets.json'),
  'https://www.googleapis.com/auth/admin.directory.user.readonly')

directoryauthdecorator = OAuth2Decorator(
    client_id='123.apps.googleusercontent.com',
    client_secret='456-abc',
    callback_path='/oauth2callback',
    scope='https://www.googleapis.com/auth/admin.directory.user.readonly '
          'https://www.googleapis.com/auth/admin.reports.audit.readonly '
          'https://www.googleapis.com/auth/admin.reports.usage.readonly'
)

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello world!')

class OAuthHandler(webapp2.RequestHandler):
    @directoryauthdecorator.oauth_required
    def get(self):
        users = []

        # Get the authorized Http object created by the decorator.
        auth_http = directoryauthdecorator.http()

        # Get the directory service
        service = build("admin", "directory_v1", http=auth_http)

        result = []
        page_token = None
        while True:
            try:
                param = {}
                param['domain'] = 'mydomain.com'
                if page_token:
                    param['pageToken'] = page_token

                files = service.users().list(**param).execute()
                result.extend(files['users'])
                page_token = files.get('nextPageToken')
                if not page_token:
                    break
            except errors.HttpError, error:
                print 'An error occurred: %s' % error
                break


        users = []
        for user in result:
            logging.info(user['primaryEmail'])
            users.append(user['primaryEmail'])

        param = {}
        param['userKey'] = 'all'
        param['applicationName'] = 'admin'

        service = build('admin', 'reports_v1', http=auth_http)

        # this call fails with the 403 Insufficient Permissions error
        results = service.activities().list(**param).execute()
        logging.info(results)

app = webapp2.WSGIApplication([
    ('/', MainHandler),
    ('/users', OAuthHandler),
    (directoryauthdecorator.callback_path, directoryauthdecorator.callback_handler()),
], debug=True)
4

1 回答 1

0

我阅读了这篇文章并从数据存储中清除了凭据。

再次点击 /users url,我收到了 redirect_uri 错误消息。

我回到 API 项目,修复了重定向 URI,并下载了 client_secrets.json 文件。

现在两个调用都可以工作(一个调用 Directory API,另一个调用 Reports API)。

于 2013-10-17T15:10:39.173 回答