2

我正在尝试通过应用程序访问用户列表。我无法让两条腿的身份验证工作。我希望能够在安装后无需用户同意即可访问谷歌的 API。gdata 库已于今年早些时候弃用,但在域管理员安装应用程序后,业务需求需要在未经用户同意的情况下访问 API。

这是我到目前为止所做的:

  • 我在 Marketplace 上创建了一个应用程序。应用清单声明了这个范围:

    https://apps-apis.google.com/a/feeds/user/

  • 我已在测试域中安装了我的应用程序并授予了上述范围的权限。

  • 我在这里查看了示例:https ://code.google.com/p/gdata-python-client/source/browse/samples/oauth/

    • Service不推荐使用的方法:2_legged_oauth.py
    • 更新Client的方法:TwoLeggedOAuthExample.py

我正在使用 Python 2.7.5 和 gdata 2.0.18。这是我的代码,它改编自上述示例:

import gdata.gauth
import gdata.apps.client

CONSUMER_KEY = "[snip].apps.googleusercontent.com"
CONSUMER_SECRET = "[snip]"
requestor_id = 'myuser@mydomain.com'

client = gdata.apps.client.AppsClient(domain='mydomain.com', source='myapp-v1')
client.auth_token = gdata.gauth.TwoLeggedOAuthHmacToken(
    CONSUMER_KEY, CONSUMER_SECRET, requestor_id)
client.ssl = True

# Failure occurs here.
feed = client.RetrieveAllUsers()

响应:

<HTML>
<HEAD>
<TITLE>Unknown authorization header</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unknown authorization header</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

以下是正在发送的标头的详细信息:

GET /a/feeds/mydomain.com/user/2.0?xoauth_requestor_id=myuser%40mydomain.com HTTP/1.1
Host: apps-apis.google.com
Accept-Encoding: identity
GData-Version: 2.0
Authorization: OAuth oauth_nonce="035378574830673", oauth_timestamp="1383593346", oauth_consumer_key="[snip].apps.googleusercontent.com", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_signature="[snip]"
User-Agent: test-test-v1 gdata-py/2.0.18

这是响应的调试信息(取自将 atom.http_core.ProxiedHttpClient 置于调试模式):

reply: 'HTTP/1.1 401 Unknown authorization header\r\n'
header: WWW-Authenticate: GoogleLogin realm="http://www.google.com/accounts/ClientLogin", service="apps"
header: Content-Type: text/html; charset=UTF-8
header: Date: Mon, 04 Nov 2013 19:33:35 GMT
header: Expires: Mon, 04 Nov 2013 19:33:35 GMT
header: Cache-Control: private, max-age=0
header: X-Content-Type-Options: nosniff
header: X-Frame-Options: SAMEORIGIN
header: X-XSS-Protection: 1; mode=block
header: Server: GSE
header: Alternate-Protocol: 443:quic
header: Transfer-Encoding: chunked

如何使用两条腿 oauth 访问域上的用户?我愿意使用较新的 Google API 客户端 (oauth2clientapiclient),但前提是我可以使用双腿身份验证,因为我有一个业务要求,即没有第三腿。

4

1 回答 1

1

我建议您阅读 有关 OAuth2 服务帐户 文档。

2-legged-OAuth 已弃用,gdata API 在很大程度上已弃用,apiclient 服务更清洁且更易于使用。

于 2013-11-05T13:00:54.713 回答