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

StackOverflow https://stackoverflow.com/questions/8373885

Вопрос

Я делаю огромную ошибку, написав свою собственную библиотеку 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, для любого запроса). Я подтвердил, что мои серверные часы находятся в пределах их секунды. Я упускаю что -то очевидное? Как бы вы это поставили диагноз?

Это было полезно?

Решение

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

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

Твиттер

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

Flickr & Tumblr

  • Ожидайте OAuth_callback на Authenticate (то есть авторизуйте) Шаг
  • Вернуть oauth_token_secret на шаге request_token (и ожидайте, что вы запомните это и используете его, чтобы подписать запрос Access_token)

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

  • Ожидается, что Google-Propitary "Scope" на шаге request_token
  • Ожидает OAuth_callback на Authenticate (то есть Oauthauthorizetoken) Step
  • Похоже, не нравится OAuth_token, переданный в заголовке авторизации на шаге Access_token (отвечает с «токеном недействительным» из-за необходимого двойного кодирования в базовой строке). Вместо этого передайте его в пост или строку запроса.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top