【问题标题】:Signing an OAuth request with an array parameter使用数组参数签署 OAuth 请求
【发布时间】: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


    【解决方案1】:

    我找到了答案,我只需要将过滤器数组作为字符串添加到参数对象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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 2015-08-13
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多