C# Autenticação de Usuário no Active Directory (AD)

Aqui irei falar um pouco sobre C# acessando o Active Directory (AD) para autenticação de usuário, inclusive estas funcionalidades podem ser estendidas para a integração com o Azure AD.

Muitas empresas estão migrando sua forma de autenticar usuários aos seus ERPs/Softwares Gestão, muitas das vezes precisamos decorar a senha do domínio, senha do e-mail, senha do ERP/Software Gestão e assim por diante, aos poucos isso vem sendo mudado, por exemplo hoje já não precisamos mais da senha do e-mail pois é a mesma senha do domínio.

Aqui vem a grande sacada, precisamos adequar nossos softwares a utilizar também esta senha de domínio.

Abaixo irei apresentar a forma de autenticar um usuário utilizando C# e Active Directory (AD), irei fazer uma aplicação Windows Form como exemplo, mas poderia ser um Web Service para utilizar em toda organização, tanto em aplicações Windows Form quanto aplicações Web, feito em qualquer linguagem, sendo necessário somente consumir o Web Service e passar Usuário e Senha.

Vamos começar!

Crie um projeto do tipo Windows Forms Application

Adicione os seguintes controles:

Após a criação do Formulário dê 2 clicks no botão confirmar teremos a tela abaixo:

Antes de mais nada precisamos adicionar a referencia System.DirectoryServices

Adicione o System.DirectoryServices;

Neste momento iremos adicionar o código que irá acessar o Active Directory (AD) efetivamente:

using System;
using System.DirectoryServices;
using System.Windows.Forms;
 namespace WindowsFormsApplication
 {
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         } 
private void btnConfirmar_Click(object sender, EventArgs e)
     {
         if (!string.IsNullOrWhiteSpace(txtUsuario.Text) && !string.IsNullOrWhiteSpace(txtSenha.Text))
         {
             try
             {
                 DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://dominio.com:389", txtUsuario.Text, txtSenha.Text);
                 DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);
                 directorySearcher.Filter = "(SAMAccountName=" + txtUsuario.Text + ")";
                 SearchResult searchResult = directorySearcher.FindOne();
                 if ((Int32)searchResult.Properties["userAccountControl"][0] == 512)
                 {
                     MessageBox.Show("Usuário Autenticado!");
                 }
                 else
                 {
                     MessageBox.Show("ERRO: Usuário/Senha Inválido!");
                 }
             }
             catch (Exception)
             {
                 MessageBox.Show("Usuário não encontrado!");
             }
         }
     }
 }
 } 

Agora é só realizar o Build e fazer os testes!

Foi tudo criado de uma forma bem simples para estudo, agora é com você aprimorar e melhorar!

Espero que tenham gostado do artigo e que ele possa ter sido útil pra vocês, abraços e até logo!