Моя подпись OAuth-запроса отличается от подписи моего поставщика услуг - PullRequest
2 голосов
/ 18 ноября 2010

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

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

Результат:

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 18 ноября 2010

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

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

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

Типичные проблемы, с которыми я сталкивался при подписи OAuth:

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

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

0 голосов
/ 21 января 2011

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

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

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

0 голосов
/ 18 ноября 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/

...