Conexão com API via pagina publica(não autenticado)

Fizemos uma widget que cria uma nova card a partir da informação de que é inserida no formulário via API (/2.0/cards/create). Via usário autenticado, funciona normal, porém se for acessar pela página publica.

Vi algo sobre as configurações de Oauth. Consegui configurar o oauth provider, porém não encontrei informações mais detalhadas na configuração do oauth APP. Alguem já conseguiu fazer esse tipo de configuração / conexão?

Fala, Pedro. Dá uma olhada se isso te ajuda!

  • Siga as instruções da sessão "Cadastrar aplicativo no Fluig" contido no link http://tdn.totvs.com/x/d4RXBQ

    • Crie um widget no fluig Studio

    • Baixe e coloque os seguintes arquivos JS na widget (tem que ser na ordem listada)


http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js

http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js

http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js

https://raw.githubusercontent.com/ddo/oauth-1.0a/master/oauth-1.0a.js

  • Para consumir algum serviço da API pública, utilize o seguinte código como exemplo: Observação: mude as informações sinalizadas

var oauth = OAuth({
    consumer: {
        'public': '<app name>', // nome do aplicativo que você criou
        'secret': '<app name>' // nome do aplicativo que você criou
    },
    signature_method: 'HMAC-SHA1'
});



var request_data = {
    url: 'http://<LINK_DO_FLUIG>/api/public/ecm/document/listDocument/2', // Altere o endereço da API desejada
    method: 'GET',
    data: {}
};


var token = {
    'public': '1a4898a6-5da5-4556-9723-0f8b53406ef0', // Seu access token
    'secret': 'db4836ac-870c-42e1-8e67-85ace70816e162c1d495-b762-46cf-8129-3ff66124c9e7' // Seu token secret
};


$.ajax({
    url: request_data.url,
    type: request_data.method,
    data: request_data.data,
    headers: oauth.toHeader(oauth.authorize(request_data, token))
})
.done(function(data) {
    console.log(data); // resposta do serviço executado
});

Fonte: http://fluig.totvs.com/portal/p/10097/articleview/fluig-dev-partner/2833497

Marcos por acaso é necessário realizar alguma tratativa pra descriptografar a resposta da requisição?

@Uákiti, não é necessário!

@Eliézer,
Baixa os arquivos JS e inclui dentro do seu widget (no projeto do Studio) para o widget carregar mais rápido.
Você precisa importar estes arquivos JS onde você precisar consumir algum serviço do fluig não autenticado. Pode ser no view.ftl, que é renderizado na visualização da página ou no edit.ftl, que é renderizado quando a página está no modo de edição. Abs!

@Marcos Jahn, estou tentando utilizar uma ferramenta da microsoft chamada PowerBI para conectar ao API do fluig. O meu maior problema é informar o Headers corretamente. existe uma função chamada

Web.Contents

nessa ferramenta e um parâmetro que eu preciso passar para uma API é o “headers”. Um exemplo seria o seguinte:

Headers = [Accept ="application/json"]

. Você sabe poderia me enviar o retorno da função que você utilizou

oauth.toHeader(oauth.authorize(request_data, token))

para eu ter um exemplo de cabeçalho correto?

conseguiu usar essa api /2.0/cards/create?
estou com problema nela no campo version
pode me ajudar?

Marcos, suas dicas foram muito boas, mas me surgiu uma dúvida. Seu código expõe a chave secreta do usuário oauth, fazendo com que qualquer pessoa tenha acesso, e consiga acessar os serviços do Fluig.

Há uma forma de impedir essa falha de segurança?

@Claudio, o ideal seria você ter uma aplicação pública server side, que servisse como um proxy pra você fazer essas operação com um escopo limitado, lá dentro tu poderia acionar a API somente se for uma API que tu queira que funcione e não expõe a chave pro usuário.
Como é uma página pública, se você não tiver um lugar que limita o escopo do que pode ser feito complica mesmo