Как мне использовать двухсторонний 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
), но только если я могу использовать двухстороннюю аутентификацию, поскольку у меня есть деловое требование не иметь третью ногу.