Versão atual:

Consumo de API em widget pública utilizando OAuth 1.0a

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. Screenshot_403.png

Postman (requisição com sucesso): Screenshot_419.png Screenshot_420.png

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.

Screenshot_416.png

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: Screenshot_421.png

Provider: Screenshot_422.png

Usuário OAuth: Screenshot_413.png

Qualquer ajuda é bem vinda. Se houver outra forma de fazer/resolver eu estou disposto a aprender.

Agradeço desde já.

Versões (2):

Ver a versão formatada

Consumo de API em widget pública utilizando OAuth 1.0a

Comentário

new question