Получение токена доступа OAuth (не зависит от языка) — та же проблема для Flickr и Tumblr, но не для Twitter

Я совершаю огромную ошибку, когда пишу свою собственную библиотеку OAuth и классы-оболочки на PHP. Все прекрасно работает для реализации OAuth в Twitter, но мне не удается подписать шаг access_token как для Tumblr, так и для Flickr.

ЕДИНСТВЕННАЯ разница на этом шаге в том, что теперь у меня есть параметры oauth_token и oauth_verifier. Я использую заголовок авторизации, и единственная проблема, о которой я могу думать, это некоторые проблемы с кодировкой символов, но я не уверен.

Базовая строка (разбита для ясности):

POST&
http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Faccess_token&
oauth_consumer_key%3Deeedfcd4c46a2c12080f58eb90a974d8
%26oauth_nonce%3D322190b47ca680d053338724ad1cc56d35d3e7b5
%26oauth_signature_method%3DHMAC-SHA1
%26oauth_timestamp%3D1322981994
%26oauth_token%3D72157628270097303-18aa378b4ab02af3
%26oauth_verifier%3Dec7811503fdd4380
%26oauth_version%3D1.0

Это именно то, что ожидает Flickr (они говорят мне об этом в ответе об ошибке), что наводит меня на мысль, что проблема заключается в подписи.

Заголовок авторизации (также разбит для ясности):

Authorization: OAuth
oauth_consumer_key="eeedfcd4c46a2c12080f58eb90a974d8", 
oauth_nonce="322190b47ca680d053338724ad1cc56d35d3e7b5",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1322981994",
oauth_token="72157628270097303-18aa378b4ab02af3",
oauth_verifier="ec7811503fdd4380",
oauth_version="1.0",
oauth_signature="LYJtgHetQWNKX3rtQlSs643FdWY%3D"

И ответ Flickr:

oauth_problem=signature_invalid&
debug_sbs=POST&
    http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Faccess_token&
    oauth_consumer_key%3Deeedfcd4c46a2c12080f58eb90a974d8
    %26oauth_nonce%3D322190b47ca680d053338724ad1cc56d35d3e7b5
    %26oauth_signature_method%3DHMAC-SHA1
    %26oauth_timestamp%3D1322981994
    %26oauth_token%3D72157628270097303-18aa378b4ab02af3
    %26oauth_verifier%3Dec7811503fdd4380
    %26oauth_version%3D1.0

Нет параметров GET или POST. Кажется, все правильно сбежало из того, что я вижу здесь. Подписание работает для шага request_token (и для Twitter, для ЛЮБОГО запроса). Я убедился, что часы моего сервера отстают от их часов на секунду. Я упускаю что-то очевидное? Как бы вы это диагностировали?


person landons    schedule 04.12.2011    source источник
comment
в чем именно заключается проблема, которую вы получаете, я имею в виду ошибку?   -  person Umesh Awasthi    schedule 04.12.2011
comment
Ха-ха. Я так сосредоточился на предоставлении всей моей информации, что забыл об ошибке. Извините, одну секунду!   -  person landons    schedule 04.12.2011


Ответы (1)


Я отвечу на свой вопрос.

Было несколько несоответствий между различными реализациями поставщиков услуг oauth:

Твиттер

  • Ожидается oauth_callback на шаге request_token
  • Не возвращает oauth_token_secret до ответа access_token
  • Следовательно, при подписании запроса access_token присутствует пустой oauth_token_secret.

Flickr и Tumblr

  • Ожидайте oauth_callback на этапе аутентификации (т.е. авторизации)
  • Верните oauth_token_secret на шаге request_token (и ожидайте, что вы запомните его и используете для подписи запроса access_token)

Youtube (и другие поставщики услуг Google OAuth):

  • На шаге request_token ожидается запатентованная Google область действия.
  • Ожидается oauth_callback на шаге аутентификации (т.е. OAuthAuthorizeToken)
  • Не похоже, что oauth_token передается в заголовке авторизации на шаге access_token (отвечает «недействительным токеном» из-за необходимости двойного кодирования в базовой строке). Вместо этого передайте его в теле сообщения или строке запроса.
person landons    schedule 05.12.2011
comment
Я застрял в том, как получить access_token от tumblr. Я получил oauth_token_secret и oauth_token от tumblr, но теперь не знаю, как получить access_token. Если я использую oauth_token как access_token здесь, тогда tumblr выдает предупреждение об аутентификации. Также, пожалуйста, дайте мне знать, используется ли в этом процессе oauth_verifier? Помогите пожалуйста мне. Я уже потратил 2 дня на то же самое. - person iOS Monster; 11.04.2013