2016-06-10 4 views
2

У меня возникла проблема при подписании запроса OAuth, который содержит массив в параметрах URL. Вот пример URL я хочу подписать:Подписание запроса OAuth с параметром массива

http://example.com/oauth1/products?filter[categorie]=myCategorie & страница = 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, то сервер отвечает сообщением 401 Unauthorized.

Invalid Signature - provided signature does not match 

Есть ли что-то не в порядке с моим кодом или это библиотека OauthSignature JS?

Заранее спасибо.

ответ

0

Я нашел ответ, я просто нужно добавить массив фильтра в виде строки в параметры объекта 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; 
} 
Смежные вопросы