DEV Community

Cover image for Autenticação NodeJs com Active Directory
Leticia Machado
Leticia Machado

Posted on

17 4

Autenticação NodeJs com Active Directory

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:

image

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;



Enter fullscreen mode Exit fullscreen mode

*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 });
   }
 };


Enter fullscreen mode Exit fullscreen mode

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;


Enter fullscreen mode Exit fullscreen mode

Partindo para o Insomnia, vamos testar nossa rota:

image

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!

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (4)

Collapse
 
lincolnoliveiradev profile image
Lincoln Oliveira

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 ?

Collapse
 
le11 profile image
Leticia Machado

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#...

Collapse
 
lincolnoliveiradev profile image
Lincoln Oliveira • Edited

Muito obrigado, na verdade estava errado o ip do servidor e a porta.

{
"message": "Authenticated!"
}

Collapse
 
paulojosemade profile image
paulojosemade

Tem que ser domain admin, ou administrators

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay