1

IT 管理者が Apps マーケットプレイスでアプリを認証すると、ユーザーのメールを読み取る Gmail サービスを構築しようとしています。ドキュメントから、サービス アカウントが適切であるように思われたので、両方を試しました。

    scope = "https://www.googleapis.com/auth/gmail.readonly"
    project_number = "c****io"
    authorization_token, _ = app_identity.get_access_token(scope)
    logging.info("Using token %s to represent identity %s",
                 authorization_token, app_identity.get_service_account_name())
    #authorization_token = "OAuth code pasted from playground"
    response = urlfetch.fetch(
        "https://www.googleapis.com/gmail/v1/users/me/messages",
        method=urlfetch.GET,
        headers = {"Content-Type": "application/json",
                   "Authorization": "OAuth " + authorization_token})

    credentials = AppAssertionCredentials(scope=scope)
    http = credentials.authorize(httplib2.Http(memcache))
    service = build(serviceName='gmail', version='v1', http=http)
    listReply = gmail_service.users().messages().list(userId='me', q = '').execute()

次に、 Unable to access BigQuery from local App Engine development serverに従って dev_appserver.py を開始しました

しかし、HTTP エラー コード 500「バックエンド エラー」が表示されます。同じコードですが、OAuth プレイグラウンドから access_token を貼り付けると、正常に動作します (HTTP 200)。違いが生じる場合に備えて、ローカルマシンにいます。私は何かが足りないのだろうか?IT 管理者が Google Marketplace アプリをインストールした特定のドメインのすべてのユーザーのすべてのメールを検索しようとしています。

助けてくれてありがとう!

4

1 に答える 1

0

このタイプのなりすましを行うには、JWT を作成し、"sub" フィールドを、アクセスするメールボックスのユーザーの電子メール アドレスに設定する必要があります。開発者向けドキュメント:サーバー間アプリケーションでの OAuth 2.0 の使用: 追加のクレーム

資格情報を作成するための Python コードは次のようになります。

credentials = SignedJwtAssertionCredentials(
    "<service account email>@developer.gserviceaccount.com",
    file("secret-privatekey.pem", "rb").read(),
    scope=["https://www.googleapis.com/auth/gmail.readonly"],
    sub="<user to impersonate>@your-domain.com"
)
于 2014-07-22T18:03:38.727 に答える