【发布时间】:2016-10-11 17:42:17
【问题描述】:
我在签署包含 URL 参数中的数组的 OAuth 请求时遇到问题。 这是我要签名的 URL 示例:
http://example.com/oauth1/products?filter[categorie]=myCategorie&page=1
我使用OAuthSignatureJS 来生成签名,它在传递简单参数时完美运行,但在添加数组时返回无效签名响应。 我尝试使用 JSON 而不是 url 但仍然相同,并且我无法更改 API 服务器代码。
这是调用函数(AngularJS)
var request = generateRequest('GET', 'products', page, 'myCategorie');
request = request+'&page='+page+'&filter[categorie]=myCategorie';
$http.get(request, {timeout: config.timeout})
.success(function(json, status, headers, config){
})
.error(function(error){
console.log(error);
})
这是我用来生成请求的函数
var generateRequest = function(method, route, page = null, categorie = null) {
var timestamp = Math.floor(new Date().getTime()/1000);
var nonce = generateNonce();
var parameters = {
oauth_consumer_key: api.key,
oauth_nonce: nonce,
oauth_timestamp: timestamp,
oauth_signature_method: api.signature,
oauth_version: api.version
};
if(page) parameters.page = page;
if(categorie) {
parameters.filter = [];
parameters.filter['categorie'] = categorie;
console.log(parameters);
}
var link = 'http://example.com/oauth1/' + route;
// Generating the signature with OauthSignatureJS
var signature = oauthSignature.generate(method, link, parameters, api.secret);
var authentification = '?oauth_consumer_key='+api.key+'&oauth_signature_method='+api.signature+'&oauth_version='+api.version+'&oauth_timestamp='+timestamp+'&oauth_nonce='+nonce+'&oauth_signature='+signature;
return link+authentification;
}
在 URL 中传递 filter[categorie] 参数时,服务器会响应 401 Unauthorized 消息。
Invalid Signature - provided signature does not match
我的代码有问题还是 OauthSignature JS 库有问题?
提前致谢。
【问题讨论】:
标签: javascript arrays oauth signing