Сбой аутентификации OAuth для API данных Google для размещенных доменов с использованием gdata - PullRequest
4 голосов
/ 03 июля 2010

Я создаю приложение django, которое создает календарь и папку Google Docs для пользователей и использует API для вставки событий и добавления документов.Несколько месяцев назад это работало достаточно хорошо;сейчас я делаю серьезный рефакторинг своего кода и, тестируя вышеупомянутые компоненты, обнаружил, что они больше не работают!Когда я пытаюсь создать папку или календарь, я получаю следующий ответ от API:

RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unknown authorization header</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unknown authorization header</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': 'Unknown authorization header'}

Мой код выглядит так - на основе в этом примере в документации Google - (код документа короче, поэтому я вставлю его, хотя бит аутентификации на самом деле является функцией, общей для обоих):

from gdata.auth import OAuthSignatureMethod, OAuthToken, OAuthInputParams
from gdata.calendar.service import CalendarService
from django.conf import settings
client_instance = CalendarService()
client_instance.SetOAuthInputParameters(OAuthSignatureMethod.HMAC_SHA1,
                                settings.OAUTH_CONSUMER_KEY,
                                consumer_secret=settings.OAUTH_CONSUMER_SECRET)
user_tokens = UserToken.objects.get(user=user)
if not user_tokens.oauth_access_token_value or not user_tokens.oauth_valid_token:
    raise Exception('The user has not allowed us to access his services')      
oauth_token=OAuthToken(key=user_tokens.oauth_access_token_value,    secret=user_tokens.oauth_access_token_secret)
oauth_token.oauth_input_params = OAuthInputParams(OAuthSignatureMethod.HMAC_SHA1,
                         settings.OAUTH_CONSUMER_KEY,
                        consumer_secret=settings.OAUTH_CONSUMER_SECRET)
client_instance.SetOAuthToken(oauth_token)
new_folder = docs_service.CreateFolder("some folder")

Исключение происходит из этой последней строки, что-то изменилось в APIили это только у меня так?(Могу поспорить, что это только я, но я не вижу этого, так как это сработало пару месяцев назад)

1 Ответ

0 голосов
/ 04 мая 2011

Причина указана в ответе json: 'reason': 'Unknown authorization header'

Одной из возможных причин является местное время вашей машины.Убедитесь, что время на вашем локальном компьютере правильное, поскольку oauth использует текущую метку времени Unix для подписи и проверки запросов. Форум поддержки Google

Вот список зарегистрированных ошибок.Первый, похоже, хорошо подходит для вашего случая:

Надеюсь, это поможет:)

...