Моя подпись запроса OAuth отличается от подписи моего поставщика услуг

Я разрабатываю приложение с использованием OAuth1.0a для iPad.

Моя проблема в том, что я не могу получить правильную подпись для моего запроса request_token. Служба, к которой я хочу подключиться, имеет инструмент отладки, который позволяет проверить подпись, которую вы должны иметь, в зависимости от ваших параметров OAuth.

Результат:

  • я получаю правильный базовый код подписи

  • я получаю разные подписи

Согласно моему пониманию OAuth, это означает, что:

  • мой алгоритм подписи прослушивается (HMAC-SHA1) (но я получаю его от стороннего поставщика: https://github.com/jdg/oauthconsumer/tree/master/Crytpo/)

  • поставщик услуг ошибается

Есть ли какой-либо бесплатный инструмент, возможно, в Интернете, который может создать подпись из базового кода подписи и ключа, чтобы проверить, кто прав, а кто нет?

Спасибо за вашу помощь


person Dirty Henry    schedule 18.11.2010    source источник


Ответы (3)


Почему бы просто не использовать все OAuthConsumer, а не только компонент HMAC-SHA1? Это хорошо используемый, хорошо протестированный код, который используется в ряде различных приложений. Я бы сказал, что OAuthConsumer "заведомо исправен".

Кажется маловероятным, что ваш поставщик услуг ошибется (если только вы не единственный клиент).

Это оставляет то, как вы используете криптографический код.

Общие проблемы, которые я видел с подписями OAuth:

  • Не сортировать параметры
  • Упущение, казалось бы, неважных параметров
  • Не отделять параметры от базового URL
  • Использование неправильного метода HTTP
  • Перенаправления или псевдонимы. Вы подключаетесь к server.com, но удаленная сторона считает себя api.server.com

Еще одна вещь, которую вы можете сделать, это использовать тот же клиентский код для подключения другой службы OAuth, например, Twitter. Если ваш код надежно создает правильную подпись для Twitter, то вполне вероятно, что он подойдет и для любой другой службы. Это (вероятно) означало бы, что проблема была, как вы предполагаете, с вашим сервисом. Я говорю «вероятно», поскольку у каждой реализации OAuth есть свои особенности.

person Stephen Darlington    schedule 18.11.2010
comment
Спасибо за ответ. На самом деле я использую весь OAuthConsumer. Но я знаю, что этот поставщик услуг довольно новичок в OAuth, но нет простого способа связаться с ним по техническим вопросам или связаться с другими разработчиками. Вот почему я склонен думать, что проблема может быть связана с поставщиком услуг. Я еще раз проверю список общих проблем, которые вы перечислили, но я думаю, что все хорошо для меня. - person Dirty Henry; 18.11.2010
comment
@ Грязный Генри Только что подумал о еще паре предложений и отредактировал с ними свой ответ. - person Stephen Darlington; 18.11.2010

Вряд ли это проблема, но попробуйте использовать встроенный в iOS метод HMAC для создания SHA:

http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/CCHmac.3cc.html

Более вероятно, что базовая строка вашей подписи на самом деле неверна. Подтвердили ли вы, что ваша базовая строка соответствует спецификации? Здесь есть хороший интерактивный инструмент, который вы можете использовать для проверки вашего запроса:

http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iv-signing-requests/

person ImHuntingWabbits    schedule 18.11.2010

Я понял, в чем была моя проблема, мой потребительский ключ содержит специальные символы ('+' и '='), и с этими символами подпись от моего провайдера и от платформы OAuth iOS отличаются.

Я пытался взглянуть на RFC, чтобы попытаться решить, кто был прав, но не смог принять решение. Так что я просто попытаюсь взломать код OAuth, чтобы он работал с моим провайдером. Я поделюсь трюком на этой странице, как только найду его.

Так что просто имейте в виду, что кодирование специальных символов может быть сложным, и если у вас есть мнение о том, как следует кодировать специальные символы, чтобы подписать вашу базу подписей, не стесняйтесь поделиться.

person Dirty Henry    schedule 21.01.2011
comment
@Henry Здравствуйте, можете ли вы предоставить мне пример реализации API RightSignature в моем приложении iOS. - person pankaj asudani; 21.10.2014