首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Magento oAuth授权失败

Magento oAuth授权失败
EN

Stack Overflow用户
提问于 2014-09-09 14:25:47
回答 2查看 5.9K关注 0票数 0

我在magento的oAuth认证中遇到了问题。

我使用以下指南创建连接:authentication.html

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

根据指南(获得未经授权的请求令牌),我为火狐配置了RESTClient。选择oAuth 1.0选项,从magento插入数据并将它们添加到标头中。

现在我有了这样的东西:

代码语言:javascript
运行
复制
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

当我提交

代码语言:javascript
运行
复制
http://www.mg19.local/oauth/initiate/?oauth_callback=http://www.mg19.local

我得到了以下结果:

代码语言:javascript
运行
复制
oauth_token=e00fc8386ba523bdd1d79a2fe61d59cb&oauth_token_secret=ca0d999010b2b149e2d51feefc328722&oauth_callback_confirmed=true

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

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

代码语言:javascript
运行
复制
http://www.mg19.local/oauth/authorize

我重定向到以下页面:

授权申请邮递员要求进入您的帐户

经授权后,申请将有权访问您的帐户。

授权拒绝

当我选择“授权”时,我将得到以下错误:

发生了错误。您的授权请求无效。

使用xDebug,我发现问题就在眼前:

代码语言:javascript
运行
复制
/**
 * 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);
...

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

请给我任何建议。

EN

回答 2

Stack Overflow用户

发布于 2014-09-10 10:23:20

据我所见,回调URL是一个把整个事情搞砸的URL。回调是OAuth中最重要的环节。回调应该是指向您站点的有效URL。

一旦用户登录到auth服务器(在您的示例中是Magneto ),Magneto将对oauth_verifier提供的回调URI进行回调。如下所示:

代码语言:javascript
运行
复制
/callback?oauth_token=tz2kmxyf3lagl3o95xnox9ia15k6mpt3&oauth_verifier=cbwwh03alr5huiz5c76wi4l21zf05eb0

然后,您的服务器应该使用下面所需的所有授权头的所有令牌API /oauth/token。从您提供的Magneto文档链接粘贴

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2017-08-11 11:41:46

我在用口香糖,真的很难用。在我的例子中,它失败了,因为我使用的是oauth_callback而不是callback,当我将它更改为:

代码语言:javascript
运行
复制
    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']);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25747140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档