Node.js e
MongoDB
http://www.luiztools.com.br
JSON Web Token
Autenticação
Autorização
CRONOGRAMA
JSON Web
Token
JSON Web Token
Introdução
JWT, resumidamente, é uma string de caracteres
codificados que, caso cliente e servidor estejam sob
HTTPS, permite que somente o servidor que conhece
o 'segredo' possa ler o conteúdo do token e assim
confirmar a autenticidade do cliente.
JSOn Web Token
Autenticação
Autenticação
npm install jsonwebtoken dotenv-safe
Estrutura
Autenticação
# .env.example, commit to repo
SECRET=
#.env, don't commit to repo
SECRET=mysecret
dotenv-safe
Autenticação
require("dotenv-safe").load();
var jwt = require('jsonwebtoken');
api-gateway
Autenticação
app.post('/login', (req, res, next) => {
if(req.body.user === 'luiz' && req.body.pwd === '123'){
//auth ok
const id = 1; //esse id viria do banco de dados
var token = jwt.sign({ id }, process.env.SECRET, {
expiresIn: 300 // expires in 5min
});
res.status(200).send({ auth: true, token: token });
}
res.status(500).send('Login inválido!');
})
api-gateway
Autenticação
app.get('/logout', function(req, res) {
res.status(200).send({ auth: false, token: null });
});
api-gateway
Autorização
Autorização
function verifyJWT(req, res, next){
var token = req.headers['x-access-token'];
if (!token)
return res.status(401).send({ auth: false, message:
'No token provided.' });
jwt.verify(token, process.env.SECRET, function(err, decoded) {
if (err) return res.status(500).send({ auth: false,
message: 'Failed to authenticate token.' });
req.userId = decoded.id;
next();
});
}
api-gateway
Autorização
// Proxy request
app.get('/users', verifyJWT, (req, res, next) => {
userServiceProxy(req, res, next);
})
app.get('/products', verifyJWT, (req, res, next) => {
productsServiceProxy(req, res, next);
})
api-gateway
Autorização
Autorização
Autorização
Autorização
Dúvidas?
Exercícios
1 Crie um login que funcione de verdade
2 Crie perfis de autorização para maior segurança
3 Controle número de requisições na API GW
Obrigado!

Curso de Node.js e MongoDB - 20