2014-09-09 2 views
0

У меня возникла проблема с аутентификацией oAuth в magento.Ошибка авторизации Magento

Я использовал следующее руководство для создания соединения: http://www.magentocommerce.com/api/rest/authentication/oauth_authentication.html

Прежде всего я получил все привилегии для всех учетных записей в Magento/System/WebServices/REST ... Кроме того, я создал OAuth Потребитель. У меня есть две переменные (ключ и секрет).

В соответствии с руководством (получение неавторизованного запроса) я настроил RESTClient для Firefox. Выбрал опцию oAuth 1.0, вставил данные из magento и добавил их в заголовки.

И теперь у меня есть что-то вроде этого:

http://www.mg19.local/oauth/initiate 

OAuth oauth_version="1.0", 
oauth_signature_method="PLAINTEXT", 
oauth_nonce="pzmp8IZuroEP6gf", 
oauth_timestamp="1410271763", 
oauth_consumer_key="9ad2067e70a4c3b799ab2799203b3e3b", 
oauth_signature="a37633084e79432568181ef00410140e%26" 

Тогда, если я представляю это, я получить следующие ошибки:

Статус Код: 400 Bad Request

oauth_problem = parameter_absent & oauth_parameters_absent = oauth_callback

Я не знаю основную цель обратной связи, поэтому я использовал rand om ссылка. Например: http://www.mg19.local

Когда я представить

http://www.mg19.local/oauth/initiate/?oauth_callback=http://www.mg19.local 

я получил следующий результат:

oauth_token=e00fc8386ba523bdd1d79a2fe61d59cb&oauth_token_secret=ca0d999010b2b149e2d51feefc328722&oauth_callback_confirmed=true 

Согласно руководства я переехал на 2-й стадии (авторизации пользователя):

Я скопировал данные от ответа на запрос. И вперед по ссылке:

http://www.mg19.local/oauth/authorize 

Я перенаправлены на следующей странице:

Авторизовать приложение Почтальон запрашивает доступ к вашей учетной записи

После применения авторизации будет иметь доступ к вам счет.

Авторизация | Отклонить

И когда я выбираю Авторизоваться Я получаю следующее сообщение об ошибке:

произошла ошибка. Ваш запрос авторизации недействителен.

Использование XDebug Я обнаружил, что проблема находится рядом:

/** 
* Load token object, validate it depending on request type, set access data and save 
* 
* @return Mage_Oauth_Model_Server 
* @throws Mage_Oauth_Exception 
*/ 
protected function _initToken() 
{ 
.... 
     } elseif (self::REQUEST_AUTHORIZE == $this->_requestType) { 
      if ($this->_token->getAuthorized()) { 
       $this->_throwException('', self::ERR_TOKEN_USED); 
... 

Я не уверен, но я думаю, что после того, как авторизация закончила успешно, то я переехал из индекса страницы аккаунта зоны и при авторизации начните снова - он не работает, и я снова перехожу на индекс.

Прошу вас дать любой совет.

ответ

1

Для того, что я вижу, обратный URL-адрес - это тот, который испортил все это. Обратный вызов является наиболее важной ссылкой в ​​OAuth. Обратный вызов должен быть действительным URL-адресом, указывающим на ваш сайт.

Как только пользователь регистрируется на сервере auth (Magneto в вашем случае), Magneto выполнит обратный вызов URI обратного вызова, предоставленный с помощью oauth_verifier. Как показано ниже:

/callback?oauth_token=tz2kmxyf3lagl3o95xnox9ia15k6mpt3&oauth_verifier=cbwwh03alr5huiz5c76wi4l21zf05eb0 

Тогда ваш сервер должен все токен API /oauth/token с всеми необходимыми заголовками авторизации ниже. Ссылка на документ с текстом Magneto вы указали

oauth_consumer_key - the Consumer Key value provided after the registration of the application. 
oauth_nonce - a random value, uniquely generated by the application. 
oauth_signature_method - name of the signature method used to sign the request. Can have one of the following values: HMAC-SHA1, RSA-SHA1, and PLAINTEXT. 
oauth_signature - a generated value (signature). 
oauth_timestamp - a positive integer, expressed in the number of seconds since January 1, 1970 00:00:00 GMT. 
oauth_token - the oauth_token value (Request Token) received from the previous steps. 
oauth_verifier - the verification code that is tied to the Request Token. 
oauth_version - OAuth version. 

Надеюсь, что это прояснится. Прочтите разделы раздела «Пользовательская авторизация и доступ к токену» ссылки, которую вы вставили.

0

Я использую Guzzle и с этим трудно справиться. В моем случае это был провал, потому что я использовал oauth_callback вместо callback, он работал, когда я изменил его:

use GuzzleHttp\Client; 
    use GuzzleHttp\HandlerStack; 
    use GuzzleHttp\Subscriber\Oauth\Oauth1; 

    $stack = HandlerStack::create(); 

    $middleware = new Oauth1([ 
     'consumer_key' => $key, 
     'consumer_secret' => $secret, 
     'token'   => null, 
     'token_secret' => null, 
     'callback' => 'https://callback.co.uk' 
    ]); 
    $stack->push($middleware); 

    $client = new Client([ 
     'base_uri' => $magentoCredentials->shopUrl, 
     'handler' => $stack 
    ]); 

    $res = $client->post('/oauth/initiate?oauth_callback', ['auth' => 'oauth']);