Em ambientes corporativos, é comum a criação de sistemas para uso interno, dessa forma, é interessante unificar login e senha, para comodidade dos usuários.
Neste artigo irei mostrar uma forma simples de autenticar-se utilizando login e senha da sua base de dados do active directory com NodeJs.
Iniciando projeto
Estrutura básica da nossa API:
Dentro de ./src/config vamos criar o arquivo activeDirectory.js, e dentro dele configurar nosso acesso ao servidor ldap.
1.instalar pacote activedirectory
yarn add activedirectory
2.Importe a biblioteca e insira as informações de seu servidor na variável de configuração, seu código deve ficar assim:
const ActiveDirectory = require('activedirectory');
const dotenv = require('dotenv');
dotenv.config();
const config = {
url: process.env.AD_URL, // IP e porta do servidor AD Ex: ldap://XXX.XXX.XXX.XXX:XXX
baseDN: process.env.DOMAIN_CONTROLLER, //nome do domínio, exemplo: teste.local
username: process.env.AD_USERNAME, // usuário do AD para configuração de acesso
password: process.env.AD_PASSWORD, // senha do usuário
}
const ad = new ActiveDirectory(config);
module.exports = ad;
*Lembre-se sempre de não expor dados sensíveis em seu código, utilize variáveis de ambiente, como no exemplo.
Autenticação
Em ./src/controllers, criaremos nosso arquivo contendo o método de autenticação de usuários.
A biblioteca activedirectory nos ofecere um método chamado authenticate, que ao receber nome de usuário, dominio e senha, chama uma função callback indicando sucesso ou erro.
const ad = require("../config/activeDirectory");
//Método para autenticar usuários
exports.user_authenticate = async (req, res) => {
const { user, pass, domain } = req.body;
try {
await ad.authenticate( domain + "\\" + user, pass,
function (err, auth) {
if (auth) {
return res.status(200).json({
message: "Authenticated!"
});
}
else {
return res.status(401).send({
message: "Authentication failed!",
error: err
});
}
});
}catch (err) {
return res.status(500).send({ message: "ERROR " + err });
}
};
Agora vamos criar uma rota para testar nossa autenticação:
const router = require('express')();
const authController = require('../controllers/auth.controller');
// => Definindo as rotas de autenticação
router.post('/login', authController.user_authenticate); //{POST} localhost:3000/api/ad/login
module.exports = router;
Partindo para o Insomnia, vamos testar nossa rota:
Sucesso em nossa autenticação!
*Neste teste foram utilizados dados fictícios, você deve preencher com um usuário e senha existente em seu servidor AD.
Pessoal, por enquanto é isso, nos próximos artigos vamos implementar JWT neste modelo de autenticação e middlewares.
Projeto completo encontra-se no Github.
Obrigada, até à próxima!
Top comments (4)
Leticia, segui post mas está retornando:
{
"message": "Authentication failed!",
"error": {
"code": 49,
"errno": "LDAP_INVALID_CREDENTIALS",
"description": "The supplied credential is invalid"
}
}
O usuário no config deve ter algum tipo de acesso especial no AD ?
Não é necessário acesso administrador, somente acesso ao dominio, verifique se a senha possa ter expirado, ou se as variáveis de configuração estão corretas.
Link da documentação do pacote que talvez possa ajudá-lo com alguns outros exemplos: npmjs.com/package/activedirectory#...
Muito obrigado, na verdade estava errado o ip do servidor e a porta.
{
"message": "Authenticated!"
}
Tem que ser domain admin, ou administrators