0

Google の App Engine のサンプル コードから始めました。

私のアプリでは、Google Admin SDK の Directory API と Reports API を使用する必要があります。

API コンソールでプロジェクトを作成し、サービスで Admin SDK を有効にしました。

ドメインの Google コントロール パネルの [高度なツール] の [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 ファイルをダウンロードしました。

これで、両方の呼び出しが機能します (1 つは Directory API へ、もう 1 つは Reports API へ)。

于 2013-10-17T15:10:39.173 に答える