使用数组参数签署 OAuth 请求
Signing an OAuth request with an array parameter
我在签署 URL 参数中包含数组的 OAuth 请求时遇到问题。
这是我要签名的 URL 的示例:
http://example.com/oauth1/products?filter[categorie]=myCategorie&page=1
我正在使用 OAuthSignatureJS 生成签名,它在传递简单参数时工作得很好,但在添加数组时 returns 一个 无效签名 回复。
我尝试使用 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 中传递过滤器 [categorie] 参数时,服务器响应 401 未授权消息。
Invalid Signature - provided signature does not match
我的代码有问题还是 OauthSignature JS 库?
提前致谢。
我找到了答案,我只需要将过滤器数组作为字符串添加到参数对象 parameters['filter[categorie]'] = categorie;
所以这是新的工作代码
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[categorie]'] = categorie;
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 参数中包含数组的 OAuth 请求时遇到问题。 这是我要签名的 URL 的示例:
http://example.com/oauth1/products?filter[categorie]=myCategorie&page=1
我正在使用 OAuthSignatureJS 生成签名,它在传递简单参数时工作得很好,但在添加数组时 returns 一个 无效签名 回复。 我尝试使用 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 中传递过滤器 [categorie] 参数时,服务器响应 401 未授权消息。
Invalid Signature - provided signature does not match
我的代码有问题还是 OauthSignature JS 库?
提前致谢。
我找到了答案,我只需要将过滤器数组作为字符串添加到参数对象 parameters['filter[categorie]'] = categorie;
所以这是新的工作代码
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[categorie]'] = categorie;
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;
}