【发布时间】:2015-01-14 21:59:31
【问题描述】:
编辑: TL;DR
有没有人将 Magento Rest API 与 angularjs 一起使用,并且可以给我一些关于如何开始使用 OAuth 的提示?
我正在尝试将 magento Rest API 与 angularjs 一起使用。我的问题是我什至没有让启动端点工作。
计算我使用https://github.com/bettiolo/oauth-signature-js的签名:
var initEndpointUrl = "http://magentoserver.com/oauth/initiate"
var parameters = {
oauth_callback: callback,
oauth_consumer_key : consumerKey,
oauth_nonce : nonce,
oauth_signature_method : signatureMethod,
oauth_timestamp : timestamp
}
var signature = oauthSignature.generate('POST', initEndpointUrl, parameters, consumerSecret);
我尝试了两种不同的方法:
1:发送带有Authorization Header的参数:
var authHeader = "OAuth "+
"oauth_callback=" + callback + "," +
"oauth_consumer_key=" + consumerKey + "," +
"oauth_nonce=" + nonce + "," +
"oauth_signature_method=" + signatureMethod + "," +
"oauth_timestamp=" + timestamp + "," +
"oauth_signature=" + signature;
$http({
method: 'POST',
url: initEndpointUrl,
header: {
'Authorization': authHeader
}
})
这种方法的问题是,我从服务器收到 OPTIONS 方法的 400 Bad Request。这是由于 Authentication 标头导致请求不是“简单请求”造成的(据我所知)。这在飞行前会调用 OPTIONS 方法。
2:将参数作为url参数发送:
http://magentoserver.com/oauth/initiate?
oauth_callback=http%3A%2F%2Flocalhost&
oauth_consumer_key=12345&
oauth_nonce=67890&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=1234567890&
oauth_signature=abcdefg1234567
使用这种方法,我取得了更大的成功,并且能够添加所有必需的参数,直到检查签名,这导致 401 oauth_problem=signature_invalid。
我对 OAuth 很陌生,所以我想生成签名的调用可能不正确。另一方面,我可以想象,通过更改参数(以及 URL),我会使签名无效。
有人有这方面的经验吗?提前致谢!
PS:我已经在https://magento.stackexchange.com/ 上发布了这个,因为我认为它会更具体。
【问题讨论】:
-
您肯定希望使用标题而不是将所需项目作为参数传递。引起我注意的第一件事是您的标题格式错误。每个变量都必须用双引号括起来,因此您必须转义设置的引号或执行此操作 'oauth_signature="' + signature + '"';。注意单引号和双引号的使用。
-
感谢您的评论。我试过了,但如果我不使用参数,我仍然会遇到在浏览器中测试时遇到的 OPTIONS 问题。
标签: angularjs api rest magento oauth