Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

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.

GLB: 0

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.

 

rmdsnguadp1fig01.jpg 

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:

 

rmdsnguadp1fig02.jpg 

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.





    13 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Marco Aurélio Duarte De Oliveira
Olá gostaria de saber quando a parte II estará disponivel.


em 14/11/2007 11:45 - Responder

 

  Regilan
Olá Marco, Estou finalizando a parte 2 do artigo. Essa semana estarei enviando para os editores do DevMedia. Possivelmente semana que vem a segunda parte deve está no ar.


em 21/11/2007 21:10 - Responder
 

Daniel
Regilan muito bom esse primeiro artigo de gerenciamento de usuários do Active Directory.


em 9/11/2007 10:10 - Responder

 

  Douglas Dorô
Parabéns. Essa primeira parte do artigo já tem muita informação para começarmos a desenvolver algo nesse sentido. Você pode informar um link com a documentação para uso do AD em nossas aplicações? Abraço!


em 10/11/2007 18:26 - Responder
 

  Regilan
Olá Daniel. Muito Obrigado!!! Espero que continue gostando das demais partes desse artigo!!!


em 21/11/2007 21:11 - Responder
 

  Regilan
Olá Douglas!!! Espero que continue gostando da sequência desse artigo. Quanto aos links, estarei colocando na sequência do artigo. ( Parte 2 )


em 21/11/2007 21:13 - Responder
 

Luiz Anderson Da Silva Dias
Ol[a amigos, primeiramente parabenizar este fantastico conteudo. Estou a quase 1 ano preocurando um material para AD e este [e sem nenhuma duvida o melhor! Agora estou tendo o mesmo problema do Michael aqui postado tb. com o GetDirectoryObject e GetLDAPDomain. POssivel me enviar a " classe de acesso ao active directory" que usou no seu projeto¿ Muito obrigado por tudo! Abraco


em 16/12/2007 14:14 - Responder

 

  Waldnilso Dourado
Olá Luiz vc pode encontrar essas classe no link da parte II, e esse http://www.c-sharpcorner.com/UploadFile/ecabral/ADand.NET08242005065451AM/ADand.NET.aspx


em 10/2/2008 10:03 - Responder
 

  Devmedia0000
boa, muito obrigado!


em 12/2/2008 16:38 - Responder
 

  Devmedia0000
thanks


em 12/2/2008 16:40 - Responder
 

Michael
Olá estou com uma dúvida o metodo GetDirectorObject() ele está no System.DirectoryServices pois não consigo visualizar ele. Acontece o mesmo com o GetLDAPDomain().


em 22/11/2007 11:24 - Responder

 

  Regilan Meira Silva
Olá Michael..Esses métodos fazem parte da classe de acesso ao active directory. Na sequência desses artigos colocarei a implementação desses métodos... Qualquer coisa entre em contato comigo que te mando a classe que usei em meu projeto


em 22/11/2007 20:14 - Responder
 

  Marcius Gomes Brandão
Também tive problemas com estes métodos. Seguem o código :

        private 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
 



Autor
Regilan Meira Silva

Regilan Meira Silva (regilan@gmail.com), é Bacharel em Ciência da Computação pela Universidade Estadual de Santa Cruz(UESC) em Ilhéus, Bahia e Especialista em Administração de Sistemas da Informação pela Universidade Federal de Lavras em Lavras, Minas Gerais. Trabalha com desenvolvimento de sistemas...


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
10   1
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da .net Magazine ou para quem possui Créditos DevMedia.

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

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03