Как мне использовать двухсторонний oauth с библиотекой python gdata?

Я пытаюсь получить доступ к списку пользователей через приложение. Я не могу заставить двуногого автора работать. Я хочу получить доступ к API Google без согласия пользователя после установки. Библиотека gdata была объявлена ​​устаревшей в начале этого года, но бизнес-требование требует доступа к API без дополнительного согласия пользователя после установки приложения администратором домена.

Вот что я сделал до сих пор:

  • Я создал приложение на торговой площадке. Манифест приложения объявляет эту область:

    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 для доступа к пользователям в домене? Я открыт для использования новых клиентов API Google (oauth2client а также apiclient), но только если я могу использовать двухстороннюю аутентификацию, поскольку у меня есть деловое требование не иметь третью ногу.

1 ответ

Я рекомендую вам прочитать документы, касающиеся учетных записей служб OAuth2.

2-legged-OAuth устарела, API-интерфейсы gdata в значительной степени устарели, а сервисы apiclient намного чище и проще в использовании.