Разоблачение моего API с помощью OAuth и использование его с помощью приложения для iPhone
Сегодня я играл с OAuth и реализовал его в своем API. До сих пор я использовал службы своего API с приложением для iPhone, и я все еще хочу сделать это, но с тех пор, как я добавил OAuth, его использование становится все труднее, и я сталкиваюсь с некоторыми проблемами.
Вот что у меня есть:
- Сторона провайдера
- Небольшая страница с ключами и секретными ключами для потребителей.
- Страница request_token для передачи токена потребителю
- Страница авторизации, чтобы дать пользователю возможность авторизовать токен, который будет использоваться
- И, наконец, страница token_access для изменения токена запроса в токене доступа для доступа к моему API
- На стороне потребителя есть:
- ключ потребителя (генерируется страницей на стороне провайдера)
- секретный ключ потребителя (генерируется страницей на стороне провайдера)
Вот что я могу сделать без проблем:
- Получить токен запроса
- Заставить пользователя авторизовать токен
И когда я пытаюсь изменить этот токен на токен доступа, у меня появляется ошибка:
OAuthException2: Signature verification failed (HMAC-SHA1)
Кажется, что-то где-то мне не хватает, но я не могу найти что! Вот еще кое-что, что я нашел в журналах, которые могут быть полезны:
Получено от потребителя:
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-us
Authorization: OAuth realm="", oauth_consumer_key="55af183bbbc2c386de3d0cb82a8bc4aa04d2883f9", oauth_token="4ba900b2cb3a6a67c13d0b089874649504d28c069", oauth_signature_method="HMAC-SHA1", oauth_signature="UKJXUjT4ZpEDeWFDVl7%2BUiqOids%3D", oauth_timestamp="1294516337", oauth_nonce="72D5BE27-D4DF-4C93-942F-96DCBCAB3509", oauth_version="1.0"
Connection: keep-alive
Cookie: PHPSESSID=676e088f8f13d7a1bb61d2437ee0b2a6
Host: localhost:8888
User-Agent: DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0
Ответ от провайдера:
X-Powered-By: PHP/5.3.2
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/plain
OAuth Verification Failed: Verification of signature failed (signature base string was "GET&http%3A%2F%2Flocalhost%3A8888%2FDearStranger%2Fwebservices%2Foauth%2Faccess_token.php&oauth_consumer_key%3D55af183bbbc2c386de3d0cb82a8bc4aa04d2883f9%26oauth_nonce%3D72D5BE27-D4DF-4C93-942F-96DCBCAB3509%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1294516337%26oauth_token%3D4ba900b2cb3a6a67c13d0b089874649504d28c069%26oauth_verifier%3D1234%26oauth_version%3D1.0"). with Array
(
[0] => dd918316d0190cf48d6bd6028ecbd9fc
[1] => ec0390f4ce6bbbe6a5f13a651f8b95ff
[2] => request
)
Я использую OAuthConsumer на стороне iPhone (http://code.google.com/p/oauthconsumer). Что-то, что эта структура делает неправильно, чтобы заставить меня получить эти ошибки?
Спасибо за ваши ответы!
Мартин
1 ответ
В конце концов я обнаружил, что не правильно использовал фреймворк OAuthConsumer для iPhone. Я пытался использовать его так же, как я должен использовать его с API-интерфейсом Twitter, но мой сервер не соответствует спецификациям Twitter.