add-core-auth-lib é uma library do pacote ADD Core, que permite aplicações node-js que abstrai autenticação. Tem como objetivo protejer um API com ua autenticação do tipo JWT válida, solicitar a autenticação do tipo JWT para um Identity Provider para uma UI, ou validar a autorização de um usuário de acordo com o escopode um JWT válido.
Install
npm install https://github.com/addvisor-app/add-core-auth-lib --save
A library está preparada para interagir com clients dos Identities Providers dos seguintes ambientes:
sap_cf- SAP Cloud Foundry Identity Provider.add_ide- ADD Identity Provider.
O tipo do client definido na variavel de ambeinte ADD_IDENTITY_CLIENT da aplicação add-core-flow-api, e server para todas as aplicações do sub-account. Para que a library importada no seu projeto seja capaz de alcançar essa variável, é necessário definir uma variável de ambiente no projeto local com a URL da aplicação add-core-flow-api no seu arquivo manifest, da seguinte forma:
env:
ADD_GLOBAL_VARIABLE_URL: 'https://add-core-flow-api-((subaccount)).((domain))/add/flow/runtime/variables'Permite que suas APIs só possam ser consumidas caso seja invocadas com um token JWT valido, conforme exemplo abaixo:
const express = require('express');
const auth = require("add-core-auth-lib").factory();
const app = express();
app.get('/addtax/test/api', auth.authenticate(), function (req, res) {
//A library, prenche o heades isAuthenticated TRUE se tem um JWT válido
if(!req.headers.isAuthenticated){
res.status(401).send({test: 'error'})
}else{
//A library, prenche o headers token com o JWT
const userName = req.headers.token.user_name;
res.status(200).send({test: 'success', user: userName});
}
});
//... start express listner..É possivel proteger a sua API sem precisar implementar na sua função a logica que controla se está autenticado, basta passar no factory as opções com o a propriedade protected igual a true (valor default é false), conforme exemplo abaixo:
const express = require('express');
const auth = require("add-core-auth-lib").factory({'protected':true});
const app = express();
app.get('/addtax/test/api', auth.authenticate(), function (req, res) {
//A library, spo permite entrar na unção se o JWT estiver valido:
//Caso contrario devolve um statucode 401 não permitindo entrar na função;
//Caso verdadeiro, permite entrar na função e prenche o heades token com o JWT;
const userName = req.headers.token.user_name;
res.status(200).send({test: 'success', user: userName});
});
//... stat express listener..Caso sua API seja invocado sem o token JWT ou um JWT inválido, é retornado um
status code 401sem que a função de sua API seja invocada.
Permite que suas UIs solicitem a autenticação de um usuário no Identity Provider do ambiente onde está hospedado a aplicação, conforme exemplo abaixo:
const express = require('express');
const auth = require("add-core-auth-lib").factory({'protected':true});
const app = express();
app.use('/addtax/test/ui/', auth.signIn(), express.static('./sapui5/'));
//... start express listner..Toda vez que a URI for invocada, vai validar se tem um token JWT valido, caso não tenha, redireciona para o Identity Provider para autenticar o usuário e captura o JWT adicionando no cookie de sessão
x-access-token.
TBD - Será possivel validar se o usuário tem permissão para executar uma API de acordo com o scope do JWT, cnforme abaixo:
const express = require('express');
const auth = require("add-core-auth-lib").factory({'protected':true});
const app = express();
app.get('/addtax/test/api', auth.autorize(['ROLE_1', 'ROLES_2']).authenticate(), function (req, res) {
const userName = req.headers.token.user_name;
res.status(200).send({test: 'success', user: userName});
});
//... stat express listener..As seguintes propriedades são aceitas no contrutor da library:
client- Essa propriedade define o client do Identity Provider, porem não é recomendado passar pelo contrututor, visto que a library busca essa proriedade na variavel de ambeinteADD_IDENTITY_CLIENTda aplicaçãoadd-core-flow-api, e server para todas as aplicações do sub-account e independente do ambiente de depoy do microservice.debug- Essa proriedade define se os log da Library serão exibidos no microservice, porem nã é recomendado passar como paramentro, mas parametrizar como variavel de ambienteADD_AUTH_DEBUG(boolean, o default é false).protected- Essa propriedade define se o middlewareauthenticatevai barrar a implementação da função da API. Caso a requisição não tenha o JWT, o modo protected igual afalse(default) e permite executar a função indicando no headers que não esta autenticado, ja comotrue, não deixa executar a função devolvendo o status code 401.
Segue abaixo o diagrama de sequencia das interações da library para os metodos authenticate e signin
ADD Cloud - Addvisor

