我在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成功完成,然后我从索引移动到帐户区域页面,当授权再次启动时 - 它失败了,我再次移动索引。
请提出任何建议。
答案 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']);