Я использую OAuth-библиотеку Objective-C с открытым исходным кодом Джона Кросби http://code.google.com/p/oauthconsumer/ для некоторой базовой http-аутентификации, которая не имеет дело с токенами, только ключом пользователя и секретом пользователя.Мой код прекрасно работает для GET, GET с параметрами в URL и POST.Однако когда я выполняю запрос POST с параметрами в URL-адресе, авторизация не проходит.Я пытаюсь понять, почему.
Сервер использует Apache Commons OAuth, поэтому я хотел бы сравнить мою базовую строку с этой библиотекой.Вот надуманный пример и базовая строка и подпись, созданные моей библиотекой.Кто-нибудь может увидеть, в чем проблема?
consumer key: abcdef
consumer secret: ghijkl
POST request: http://emptyrandomhost.com/a/uriwith/params?interesting=foo&prolific=bar
my base string: POST&http%3A%2F%2Femptyrandomhost.com%2Fa%2Furiwith%2Fparams&interesting%3Dfoo%26oauth_consumer_key%3Dabcdef%26oauth_nonce%3D1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D2%26oauth_version%3D1.0%26prolific%3Dbar
Эти данные дают следующую авторизацию заголовка OAuth:
Authorization: OAuth oauth_consumer_key="abcdef",
oauth_version="1.0",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="2",
oauth_nonce="1",
oauth_signature="Z0PVIz5Lo4eB7aZFT8FE3%2FFlbz0%3D"
И, очевидно, моя подпись неверна.Проблема должна заключаться либо в построении базовой строки, в способе реализации функции HMAC-SHA1 (с использованием Apple CCHmac из CommonHMAC.h, так что, надеюсь, это не так), либо в моем Base64Transcoder, которыйс открытым исходным кодом c.2003 Джонатан Уайт / Toxic Software.Я в первую очередь подозреваю базовую строку, так как запросы работают для GET и POST и терпят неудачу только с POST с параметрами URL, как указано выше.
Может ли кто-то с большим опытом работы с OAuth определить вышеописанную проблему?Еще одна полезная вещь - это базовая строка, которая создается Apache Commons OAuth при их аутентификации.Спасибо.