Skip to content

Instantly share code, notes, and snippets.

@horacioibrahim
Last active October 21, 2016 22:45
Show Gist options
  • Select an option

  • Save horacioibrahim/4d32aa1e8f761f83cfb1 to your computer and use it in GitHub Desktop.

Select an option

Save horacioibrahim/4d32aa1e8f761f83cfb1 to your computer and use it in GitHub Desktop.
Login Expresso via Node.js

Overview

Uso uma sequência um pouco diferente para garantir que os administradores do serviço que concede a validação não consigam ter acesso ao nosso serviço, pois a chave gerada pelo expresso é armazenada lá no backend deste serviço se usarmos apenas essa chave para acesso ao nosso sistema, como chave de sessão, teremos um problema de controle. Então uso o JWT (json web token) em conjunto com a chave do expresso, mais uma chave privada (RSA, etc) para criar o hash que chamo de access_token. Esse é enviado para o usuário da app mobile.

O fluxo ocorre mais ou menos conforme o link abaixo. Não deu para expressar o retorno do login até o dispositivo devido a limitação gráfica da ferramenta que eu estava usando.

Diagrama

var requests = require('request-json');
var client = requests.createClient('https://expressobr.serpro.gov.br');
var dataJson = {
'params': {
'username': '',
'password': '',
'securitycode': ''
},
'jsonrpc': '2.0',
'method': 'Tinebase.login',
'id': 3
};
// client eh o cara que faz a requisição, poderia ser o browser se não fosse CORS.
// Os servidores do Expresso não têm CORS habilitados.
client.post('/index.php', dataJson, function(err, reply, body) {
// dados que serão enviados ao expresso
dataJson['params']['username'] = username; // capturado de um form qualquer
dataJson['params']['password'] = password; // idem
if (err) {
res.send("Error: " + err);
} else {
var returnedFromExpresso = body;
var jsonKey = returnedFromExpresso.result.jsonKey; // {result: {jsonKey: 'XXX', account:'YYY'}}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment