Не могу авторизовать меня с помощью OAuth 1.0a, ошибка при запросе accesToken

Я пытаюсь авторизовать меня в службе с использованием OAuth 1.0a. Я могу выполнить шаги requestToken и authorize, но когда я вызываю accessToken URL, я получаю ответ 401 Unauthorized со следующим сообщением:
OAuth Verification Failed: Can't exchange request token "THE_TOKEN" for access token. No such token or not authorized%

Я замаскировал учетные данные и URL-адреса.

URL-адрес токена запроса: https://url-to-the-service.com/oauth/requestToken
URL-адрес токена авторизации: https://url-to-the-service.com/oauth/authorize
URL-адрес токена доступа: https://url-to-the-service.com/oauth/accessToken

Учетные данные, которые я получил от службы, следующие:
consumer_key = CONSUMER_KEY
consumer_secret = CONSUMER_SECRET

ШАГ 1 - запросить временный токен

curl -v -X GET --url "https://url-to-the-service.com/oauth/requestToken?oauth_version=1.0& \
oauth_timestamp=1516721112& \
oauth_nonce=25794& \
oauth_signature_method=PLAINTEXT& \
oauth_consumer_key=CONSUMER_KEY& \
oauth_signature=CONSUMER_SECRET%26"

Затем служба отвечает:

oauth_callback_confirmed=true&oauth_token=THE_TOKEN&oauth_token_secret=THE_TOKEN_SECRET&xoauth_token_ttl=3600

ШАГ 2 - авторизуйте меня с помощью временного токена и получите верификатор

Затем я ввожу это в свой браузер:

https://url-to-the-service.com/oauth/authorize?oauth_token=THE_TOKEN

... и он предлагает мне войти в службу. Когда я нажимаю кнопку авторизации после входа в систему, меня перенаправляют на этот URL:

https://url-to-the-service.com/oauth/authorize?yes=1&oauthVerifier=123456789&oauth_token=THE_TOKEN

ШАГ 3 - запросить токен доступа

Наконец, я обращаюсь к https://url-to-the-service.com/oauth/accessToken, добавляя oauth_verifier и секрет токена к oauth_signature:

curl -v -X GET --url "https://url-to-the-service.com/oauth/accessToken?oauth_version=1.0& \ 
oauth_timestamp=1516730938& \
oauth_nonce=30888& \
oauth_signature_method=PLAINTEXT& \
oauth_consumer_key=CONSUMER_KEY& \
oauth_signature=CONSUMER_SECRET%26THE_TOKEN_SECRET& \
oauth_token=THE_TOKEN& \
oauth_verifier=123456789"

Но служба отвечает:
OAuth Verification Failed: Can't exchange request token "THE_TOKEN" for access token. No such token or not authorized%

Так что же мне не хватает?


person Rox    schedule 23.01.2018    source источник


Ответы (2)


Согласно rfc5849 3.2 Проверка запросов

Серверу СЛЕДУЕТ возвращать код статуса 401 (неавторизованный) при получении запроса с недопустимыми учетными данными клиента, недействительным или просроченным токеном, недействительной подписью. , либо недействительный или использованный одноразовый номер.

Я не уверен, что значение xoauth_token_ttl=3600 из шага 1 составляет минуты или секунды. Если это секунды, срок действия первого запроса на 1516721112 и запроса токена доступа на 1516730938 истек. (1516730938 - 1516721112 = 9826)

person Wilhelm Liao    schedule 02.02.2018

Похоже, вы форсируете запрос GET в своем запросе cURL. Попробуйте выполнить запрос POST, как показано ниже:

curl -v -X POST --url "https://url-to-the-service.com/oauth/accessToken?
oauth_version=1.0& \ 
oauth_timestamp=1516730938& \
oauth_nonce=30888& \
oauth_signature_method=PLAINTEXT& \
oauth_consumer_key=CONSUMER_KEY& \
oauth_signature=CONSUMER_SECRET%26THE_TOKEN_SECRET& \
oauth_token=THE_TOKEN& \
oauth_verifier=123456789"

См. документацию OAuth1. Цитата здесь для справки:

Обмен токенов

Последним шагом авторизации является обмен временных учетных данных (токен запроса) на долговременные учетные данные (также известные как токен доступа). Этот запрос также уничтожает временные учетные данные.

Временные учетные данные преобразуются в долговременные учетные данные путем отправки запроса POST в конечную точку запроса токена (обычно / oauth1 / access). Этот запрос должен быть подписан временными учетными данными и должен включать токен oauth_verifier из шага авторизации.

person varunsangal    schedule 01.02.2018