Desenvolvendo uma solução .Net para gerenciamento de usuários do Active Directory - Parte I
Hoje em dia acontece muito em nossas atividades de analista e programador várias situações onde somos desafiados a gerar algum aplicativo para acessar e gerenciar algum serviço disponibilizado pelo Sistema Operacional.
Desenvolvendo uma solução .Net para gerenciamento de usuários do Active Directory - Parte I
Hoje em dia acontece muito em nossas atividades de analista e programador várias situações onde somos desafiados a gerar algum aplicativo para acessar e gerenciar algum serviço disponibilizado pelo Sistema Operacional. Há alguns meses atrás, fui desafiado a desenvolver uma solução para gerenciar os usuários da rede aqui da Universidade onde trabalho. A Universidade (Universidade Estadual de Santa Cruz) implantou um serviço de gerência de usuários conhecido como Active Directory.
O Active Directory surgiu da necessidade de se ter um único diretório, ou seja, ao invés do usuário ter uma senha para acessar o sistema principal de uma instituição, uma senha para ler seus e-mails, uma senha para se autenticar no computador, e várias outras senhas, com a utilização do Active Directory, os usuários poderão ter apenas uma única senha para acessar todos os recursos disponíveis na rede da empresa. Podemos definir um diretório como sendo um banco de dados que armazena as informações dos usuários. O Active Directory surgiu juntamente com o Windows 2000 Server e os objetos como usuários, grupos, membros dos grupos, senhas, contas de computadores, informações sobre o domínio, unidades organizacionais, etc, ficam armazenados no banco de dados do Active Directory e são acessadas a partir ferramentas administrativas.
O Windows Server possui ferramentas administrativas como o MMC (Console de Gerenciamento Microsoft) que simplificam a administração de serviços de diretório, mas não é tão amigável para o usuário comum, que no caso representam a grande maioria dos usuários que iriam criar contas no domínio da UESC.
Diante disso tínhamos o seguinte cenário:
“Implementar uma solução para que os gerentes dos setores, colegiados, departamentos pudessem criar facilmente usuários para funcionários, alunos, servidores, professores, e etc.”
A partir do cenário acima, veio a solução: Desenvolver um aplicativo WEB para que os responsáveis por departamento, setores e colegiados pudessem criar contas de usuários para acessar os recursos da rede UESC.
Diante disso foi dado o pontapé para o desenvolvimento, e nesse artigo, ou melhor, nessa série de artigos estarei apresentando como gerenciar usuários do Active Directory via .NET.
Nossa aplicação será desenvolvida em uma solução que possuirá três projetos:
1. Um projeto do tipo Class Library – Nesse artigo estou usando uma classe já disponível na internet onde realizei algumas melhorias e adaptações para o projeto especifico;
2. Um projeto do tipo Windows Application;
3. Um projeto do Tipo Asp.Net Web Site.
Sendo assim, crie um novo projeto em Visual C# no Visual Studio.Net 2005 do tipo Class Library e chame de dllActiveDirectory.
Figura 1 – Criando um projeto Class Library
Altere o nome da Classe: Class1, para ActiveDirectory, e o projeto deverá possuir a seguinte estrutura conforme a imagem abaixo:
Figura 2 – Estrutura do Solução
O .net framework possui uma namespace conhecida como: System.DirectoryServices. Este namespace contém dois componentes principais: DirectoryEntry e DirectorySearcher. O DirectoryEntry incorpora um nó ou objeto na hierarquia do Active Directory e é utilizada para a leitura de propriedades e atributos de um objeto, além de fornecer métodos para criar, excluir, renomear e mover um objeto da Árvore de Objetos do Active Directory. O DirectorySearcher é uma classe para realizar consultas na hierarquia do Active Directory.
Agora que sabemos a finalidade da namespace DirectoryServices, vamos importa-la ao nosso projeto. Utilize a palavra reservada < using >, conforme abaixo:
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace dllActiveDirectory
{
public class ActiveDirectory
{
}
Listagem 1 – Adicionando a namespace DirectoryServices
Obs. Provavelmente você deverá adicionar uma referência a namespace System.DirectoryServices, para isso clique com o botão direito e selecione Add Reference. Vá até a namespace System.DirectoryServices e clique em OK.
Agora vamos adicionar algumas variaveis em nossa classe que serão usadas para armazenar os valores referentes a usuário, senha, caminho do dominio, nome do servidor de dominio. Para isso crie uma region e dentro dela crie as variveis.Veja a imagem abaixo:
#region Variaveis
public static string ADUsuarioAdministrador;// Nome do usuario administrador do dominio
public static string ADSenhaAdministrador;//Senha do Controlador de Dominio = DC
public static string ADCaminho;// Caminho completo do servidor "LDAP://192.168.0.3";
public static string ADServidor;//Nome do servidor, exemplo: uesc.net
#endregion
Listagem 2 – Variáveis
Vamos também declarar algumas enumerações que serão usadas para definir alguns parametros dos objetos do active directory. Veja a lista abaixo:
#region Enumerações
public enum ADParametrosContas
{
UF_TEMP_DUPLICATE_ACCOUNT = 0x0100,
UF_NORMAL_ACCOUNT = 0x0200,
UF_INTERDOMAIN_TRUST_ACCOUNT = 0x0800,
UF_WORKSTATION_TRUST_ACCOUNT = 0x1000,
UF_SERVER_TRUST_ACCOUNT = 0x2000,
UF_DONT_EXPIRE_PASSWD = 0x10000,
UF_SCRIPT = 0x0001,
UF_ACCOUNTDISABLE = 0x0002,
UF_HOMEDIR_REQUIRED = 0x0008,
UF_LOCKOUT = 0x0010,
UF_PASSWD_NOTREQD = 0x0020,
UF_PASSWD_CANT_CHANGE = 0x0040,
UF_ACCOUNT_LOCKOUT = 0X0010,
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 0X0080,
}
#endregion
Listagem 3 – Enumerações
Agora que definimos as variáveis e as enumerações que serão usadas na classe, vamos começar a desenvolver os métodos de manipulação do Active Directory. Nosso primeiro método irá verificar se um determinado usuário existe no AD (Active Directory), para isso declare um método que retorne um resultado booleano a partir de um nome de usuário informado como paramêtro desse método. Veja como ficou a implementação desse método na Listagem 4.
Obs. Os detalhes da implementação dos métodos serão escritos em forma de comentários nos respectivos códigos dos métodos. Como esta classe é feita a partir de uma classe já existente, alguns métodos não foram implementados por mim, mas estarão fazendo parte da classe que utilizei no projeto.
public static bool verificaUsuario(string nomeUsuario)
{
//ALGUNS Métodos nessa classe já estavam implementados, visto que
//estou fazendo adaptações nessa classe para a implementação do programa
//especifico a esse artigo...
//todos os métodos necessários estarão descritos nessa classe.
//cria uma instância de diretório
DirectoryEntry de = GetDirectoryObject("/" + GetLDAPDomain());
//cria uma instancia da classe DirectorySearcher para realizar consultas no banco de dados do AD
DirectorySearcher dePesquisa = new DirectorySearcher(de);
//filtro de pesquisa que será pelo nome do usuario
dePesquisa.SearchRoot = de;
dePesquisa.Filter = "(&(objectCategory=user)(objectClass=person)(sAMAccountName=" + UserName + "))";
//encontra o resultado e armazena numa collection
SearchResultCollection resultado = dePesquisa.FindAll();
//se não encontrou nada, o usuário naum existe e retorna false
if (resultado.Count == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
Listagem 4 – Método que verifica se um usuário existe
Por Enquanto é só. Na segunda parte deste artigo veremos alguns outros métodos que usaremos em nossa aplicação de gerenciamento do Active Directory.


em 14/11/2007 11:45 - Responder

Regilanem 21/11/2007 21:10 - Responder


em 9/11/2007 10:10 - Responder

Douglas Dorôem 10/11/2007 18:26 - Responder

Regilanem 21/11/2007 21:11 - Responder

Regilanem 21/11/2007 21:13 - Responder


em 16/12/2007 14:14 - Responder

Waldnilso Douradoem 10/2/2008 10:03 - Responder

Devmedia0000em 12/2/2008 16:38 - Responder

Devmedia0000em 12/2/2008 16:40 - Responder


em 22/11/2007 11:24 - Responder

Regilan Meira Silvaem 22/11/2007 20:14 - Responder

Marcius Gomes Brandãoprivate static DirectoryEntry GetDirectoryObject(string DomainReference)
{
DirectoryEntry oDE;
oDE = new DirectoryEntry(ADCaminho + DomainReference, ADUsuarioAdministrador, ADSenhaAdministrador, AuthenticationTypes.Secure);
return oDE;
}
private static string GetLDAPDomain()
{
StringBuilder LDAPDomain = new StringBuilder();
string[] LDAPDC = ADServidor.Split('.');
for (int i = 0; i < LDAPDC.GetUpperBound(0) + 1; i++)
{
LDAPDomain.Append("DC=" + LDAPDC[i]);
if (i < LDAPDC.GetUpperBound(0))
{
LDAPDomain.Append(",");
}
}
return LDAPDomain.ToString();
}
em 1/8/2008 11:15 - Responder
Space do autor

Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL


10
1
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!