OAuth1 reject_token 401 не авторизован - PullRequest
0 голосов
/ 28 ноября 2018

Запрос на получение токена доступа OAuth1.0 работает только один раз для Magento1.9 после перенаправления обратно с URL авторизации.В следующий раз, запрашивая токен доступа, я получаю reject_token.Я заметил, что есть различие в подписи подписи обоих объектов.

Запрос 1 (успешный):

OAuth::Consumer.new(consumer_data)
OAuth::RequestToken.from_hash(some_hash)
request_token.get_access_token(oauth_verifier: 'asdfasdagbadbv')

с подписью, имеющей

oauth_nonce=\"iIHmN7obLeONSitOxFFZQI71v0k4mAsEFLFen0Lw\", 
oauth_signature=\"lwj0n1AK3VJLdaXHIWEOFlYp5qc%3D\"

Запрос 2 (неудачно):

OAuth::Consumer.new(consumer_data)
OAuth::RequestToken.from_hash(some_hash)
request_token.get_access_token(oauth_verifier: 'asdfasdagbadbv')

с подписью, имеющей

oauth_nonce=\"KciY4tiiPDu1u029Nbdu1C325svchfESTYV1l8mvw\", 
oauth_signature=\"KciY4tiiPt5Du1u029Nbdu1CzCHzvc%3D\"

Это может быть или не быть проблемой, но это единственное различие, которое я обнаружил до сих пор в обоих запросах.Пожалуйста, кто-нибудь поможет мне в обновлении oauth_nonce и signature или разработает какое-то другое решение.

1 Ответ

0 голосов
/ 30 ноября 2018

Проблема находится во второй строке.

 request_token.get_access_token(oauth_verifier: 'asdfasdfa')

Согласно Auth токен запроса на документацию следует использовать один раз.Срок действия запроса токена истекает после его использования.Вы используете токен запроса с истекшим сроком действия во втором вызове , что делает reject_token 401 неавторизованным.

Решение

На самом деле токены запроса используются для создания AccessТокен.Токены доступа можно использовать несколько раз.Так что вам нужно где-то хранить токен доступа, сгенерированный в первой строке request_token.get_access_token(oauth_verifier: 'asdfasdfa').Затем вы можете использовать сохраненный токен доступа для сброса вызовов API.Синтаксис использования токена доступа следующий:

@consumer = OAuth::Consumer.new(...)
@token = OAuth::Token.new('ACCESS_TOKEN', 'ACCESS_TOKEN_SECRET') // saved access token and secret here
@consumer.request(:post, '/people', @token, {}, @person.to_xml, { 'Content-Type' => 'application/xml' })
...