Olá, estou tentando consumir uma API pública do fluig em uma widget pública, sem estar logado. Eu consigo fazer as chamadas utilizando OAuth estando logado, porém sem logar sempre tenho retorno "unauthorized".
Percebi que os screenshots ficaram cortados, para visualizar 100% clique com o botão direito > abrir imagem em nova guia
Nos screenshots abaixo eu tento fazer o consumo da API de duas formas: Passando OAuth através de headers em um AJAX simples(1) e pelo body na requisição, após gerar um objeto OAuth(2). Em ambos os métodos eu utilizo "Usuário Aplicativo", gerado para um "App OAuth" - link documentação utilizada.
1: Nesse screenshot eu utilizo headers gerados pelo Postman ao preencher os campos de autenticação para fazer um AJAX simples. Na esquerda estou logado, na direita não. Ambos estão na mesma widget fluig com OAuth e CryptoJS instanciados.
Postman (requisição com sucesso):
2: Já nesse screenshot eu estou utilizando uma função de SuperWidget, em questão de login é o mesmo esquema que acima, um está logado e o outro não. A diferença é que ao invés de passar headers eu utilizo OAuth Authorize no body do request.
Código/função do screenshot acima:
getColleagao: function() {
// Define o pacotinho OAuth
var oauth = OAuth({
consumer: {
key: 'oauthTesteMaximo',
secret: 'qualquercoisa'
},
signature_method: 'HMAC-SHA1',
hash_function: function(base_string, key) {
return CryptoJS.HmacSHA1(base_string, key).toString(CryptoJS.enc.Base64);
},
nonce_length: 6
});
// Request que você faria normalmente dentro do fluig
var request_data = {
// Necessário passar URL completa para não dar erro de signature invalid
url: 'http://devfluig.iv2.com.br/api/public/ecm/dataset/search',
method: 'GET',
data: {
datasetId: 'colleague'
}
};
// Tokens do usuário aplicativo (mó doidera, setei mas não consigo achar mais onde fica)
var token = {
key: '47a5226a-5820-4220-9c1b-023e083663a3',
secret: 'b852d26a-6478-46e0-b285-4d3f65ea03f69bd4f95b-b4a3-4d2e-ad60-137791748b1c'
};
/* A geração dos dados para autenticação OAuth , esta sendo gerado no atributo data do ajax
* através da chamada do método: oauth.authorize(request_data, token)
*/
$.ajax({
url: request_data.url,
crossDomain: true,
async: true,
type: request_data.method,
data: oauth.authorize(request_data, token)
}).done(function(data) {
console.log(data);
});
}
App OAuth criado no ambiente fluig:
Provider:
Usuário OAuth:
Qualquer ajuda é bem vinda. Se houver outra forma de fazer/resolver eu estou disposto a aprender.
Agradeço desde já.