Magento oAuth授权失败

时间:2014-09-09 14:25:48

标签: php rest magento oauth

我在magento中遇到oAuth身份验证问题。

我使用以下指南来创建连接: http://www.magentocommerce.com/api/rest/authentication/oauth_authentication.html

首先,我为magento / System / WebServices / REST中的所有帐户授予了所有权限...我还创建了oAuth Consumer。我得到了两个变量(密钥和秘密)。

根据指南(获取未经授权的请求令牌),我为Firefox配置了RESTClient。选择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错误请求

oauth_problem = parameter_absent&安培; oauth_parameters_absent = oauth_callback

我不知道回调链接的主要目的,因此我使用了随机链接。例如: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

根据指南,我转到第二步(用户授权):

我将响应中的数据复制到请求中。并转发链接:

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);
...

我不确定,但我认为,一旦autorization成功完成,然后我从索引移动到帐户区域页面,当授权再次启动时 - 它失败了,我再次移动索引。

请提出任何建议。

2 个答案:

答案 0 :(得分:1)

对于我所看到的,回调网址是弄乱整个事情的网址。回调是OAuth中最重要的链接。回调应该是指向您站点的有效URL。

一旦用户登录auth服务器(在您的情况下为Magneto),Magneto将回调您使用oauth_verifier提供的回调URI。如下所示:

/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.

希望这说清楚。请阅读您粘贴的链接的“用户授权”和“获取访问令牌”部分。

答案 1 :(得分: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']);