1

私はこれを徹底的に読みました: https://developers.google.com/google-apps/documents-list/#using_google_apps_administrative_access_to_impersonate_other_domain_users これをグーグルで検索しました。

これまでのところ、次のことができました。

  1. 承認:

    • クライアントログイン
    • OAuth トークン (自分のドメイン キーを使用)
  2. ドメイン内のすべてのユーザーのドキュメント フィードを取得します (#1 のいずれかの方法で承認されています)
    。フィードからの「エントリ」を使用してドキュメントをエクスポート/ダウンロードしていますが、管理者と共有されていないドキュメントについては、他のユーザーに対して常に禁止されています。私が使用しているフィードクエリは次のようなものです: https://docs.google.com/feeds/userid@mydomain.com/private/full/?v=3 (私は ?v=3 の有無にかかわらず試しました)

また、xoauth_requestor_id (投稿で xoauth_requestor として見たこともあります) を uri とクライアント プロパティの両方に追加してみました。client.xoauth_requestor_id = ...

コードの一部:

クライアント ログイン (管理者資格情報を使用):

client.http_client.debug = cfg.get('HTTPDEBUG')
client.ClientLogin( cfg.get('ADMINUSER'), cfg.get('ADMINPASS'), 'HOSTED' )

OAuth:

client.http_client.debug = cfg.get('HTTPDEBUG')
client.SetOAuthInputParameters( gdata.auth.OAuthSignatureMethod.HMAC_SHA1, cfg.get('DOMAIN'), cfg.get('APPS.SECRET') )
oatip = gdata.auth.OAuthInputParams( gdata.auth.OAuthSignatureMethod.HMAC_SHA1, cfg.get('DOMAIN'), cfg.get('APPS.SECRET') )
oat = gdata.auth.OAuthToken( scopes = cfg.get('APPS.%s.SCOPES' % section), oauth_input_params = oatip )
oat.set_token_string( cfg.get('APPS.%s.TOKEN' % section) )
client.current_token = oat

フィードが取得されたら:

# pathname eg whatever.doc
client.Export(entry, pathname)
# have also tried
client.Export(entry, pathname, extra_params = { 'v': 3 } )
# and tried
client.Export(entry, pathname, extra_params = { 'v': 3, 'xoauth_requestor_id': 'admin@mydomain.com' } )

ここで何が欠けているかについての提案や指針はありますか? ありがとう

4

1 に答える 1

1

あなたは正しい実装に非常に近づいていました。上記の例では、次のものがありました。

client.Export(entry, pathname, extra_params = { 'v': 3, 'xoauth_requestor_id': 'admin@mydomain.com' } )

xoauth_requestor_id は、偽装しているユーザーに設定する必要があります。また、トークンまたはクライアントで xoauth_requestor_id を設定して 2-Legged OAuth 1.0a を使用する必要があります。

import gdata.docs.client
import gdata.gauth

import tempfile


# Replace with values from your Google Apps domain admin console
CONSUMER_KEY = ''
CONSUMER_SECRET = ''

# Set this to the user you're impersonating, NOT the admin user
username = 'userid@mydomain.com'
destination = tempfile.mkstemp()

token = gdata.gauth.TwoLeggedOAuthHmacToken(
    consumer_key, consumer_secret, username)
# Setting xoauth_requestor_id in the DocsClient constructor is not required
# because we set it in the token above, but I'm showing it here in case your
# token is constructed via some other mechanism and you need another way to
# set xoauth_requestor_id.
client = gdata.docs.client.DocsClient(
    auth_token=token, xoauth_requestor_id=username)
# Replace this with the resource your application needs
resource = client.GetAllResources()[0]
client.DownloadResource(resource, path)
print 'Downloaded %s to %s' % (resource.title.text, destination)

ソース コード内の TwoLeggedOAuthHmacToken クラスへの参照は次のとおりです。

  1. http://code.google.com/p/gdata-python-client/source/browse/src/gdata/gauth.py#1062

xoauth_requestor_id コンストラクター パラメーターを提供するソース コード内の参照は次のとおりです (これらを順番に読んでください)。

  1. http://code.google.com/p/gdata-python-client/source/browse/src/atom/client.py#42
  2. http://code.google.com/p/gdata-python-client/source/browse/src/atom/client.py#179
  3. http://code.google.com/p/gdata-python-client/source/browse/src/gdata/client.py#136
于 2012-04-13T00:27:54.113 に答える