Active Directory Directory Searcher

Download Active Directory Directory Searcher

Post on 14-Jul-2015

297 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

http://www.devmedia.com.br/post-7242-Desenvolvendo-uma-solucao--Netpara-gerenciamento-de-usuarios-do-Active-Directory--Parte-I.html

Desenvolvendo uma soluo .Net para gerenciamento de usurios do Active Directory - Parte IHoje em dia acontece muito em nossas atividades de analista e programador vrias situaes onde somos desafiados a gerar algum aplicativo para acessar e gerenciar algum servio disponibilizado pelo Sistema Operacional.

Share

Desenvolvendo uma soluo .Net para gerenciamento de usurios do Active Directory - Parte IHoje em dia acontece muito em nossas atividades de analista e programador vrias situaes onde somos desafiados a gerar algum aplicativo para acessar e gerenciar algum servio disponibilizado pelo Sistema Operacional. H alguns meses atrs, fui desafiado a desenvolver uma soluo para gerenciar os usurios da rede aqui da Universidade onde trabalho. A Universidade (Universidade Estadual de Santa Cruz) implantou um servio de gerncia de usurios conhecido como Active Directory. O Active Directory surgiu da necessidade de se ter um nico diretrio, ou seja, ao invs do usurio ter uma senha para acessar o sistema principal de uma instituio, uma senha para ler seus e-mails, uma senha para se autenticar no computador, e vrias outras senhas, com a utilizao do Active Directory, os usurios podero ter apenas uma nica senha para acessar todos os recursos disponveis na rede da empresa. Podemos definir um diretrio como sendo um banco de dados que armazena as informaes dos usurios. O Active Directory surgiu juntamente com o Windows 2000 Server e os objetos como usurios, grupos, membros dos grupos, senhas, contas de computadores, informaes sobre o domnio, unidades organizacionais, etc, ficam armazenados no banco de dados do Active Directory e so acessadas a partir ferramentas administrativas. O Windows Server possui ferramentas administrativas como o MMC (Console de Gerenciamento Microsoft) que simplificam a administrao de servios de diretrio, mas no to amigvel para o usurio comum, que no caso representam a grande maioria dos usurios que iriam criar contas no domnio da UESC. Diante disso tnhamos o seguinte cenrio: Implementar uma soluo para que os gerentes dos setores, colegiados, departamentos pudessem criar facilmente usurios para funcionrios, alunos, servidores, professores, e etc.

A partir do cenrio acima, veio a soluo: Desenvolver um aplicativo WEB para que os responsveis por departamento, setores e colegiados pudessem criar contas de usurios para acessar os recursos da rede UESC. Diante disso foi dado o pontap para o desenvolvimento, e nesse artigo, ou melhor, nessa srie de artigos estarei apresentando como gerenciar usurios do Active Directory via .NET. Nossa aplicao ser desenvolvida em uma soluo que possuir trs projetos: 1. Um projeto do tipo Class Library Nesse artigo estou usando uma classe j disponvel na internet onde realizei algumas melhorias e adaptaes 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 Soluo O .net framework possui uma namespace conhecida como: System.DirectoryServices. Este namespace contm 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, alm de fornecer mtodos 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 referncia a namespace System.DirectoryServices, para isso clique com o boto direito e selecione Add Reference. V at a namespace System.DirectoryServices e clique em OK. Agora vamos adicionar algumas variaveis em nossa classe que sero usadas para armazenar os valores referentes a usurio, 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 Variveis Vamos tambm declarar algumas enumeraes que sero usadas para definir alguns parametros dos objetos do active directory. Veja a lista abaixo: #region Enumeraes 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 Enumeraes Agora que definimos as variveis e as enumeraes que sero usadas na classe, vamos comear a desenvolver os mtodos de manipulao do Active Directory. Nosso primeiro mtodo ir verificar se um determinado usurio existe no AD (Active Directory), para isso declare um mtodo que retorne um resultado booleano a partir de um nome de usurio informado como paramtro desse mtodo. Veja como ficou a implementao desse mtodo na Listagem 4.

Obs. Os detalhes da implementao dos mtodos sero escritos em forma de comentrios nos respectivos cdigos dos mtodos. Como esta classe feita a partir de uma classe j existente, alguns mtodos no foram implementados por mim, mas estaro fazendo parte da classe que utilizei no projeto. public static bool verificaUsuario(string nomeUsuario) { //ALGUNS Mtodos nessa classe j estavam implementados, visto que //estou fazendo adaptaes nessa classe para a implementao do programa //especifico a esse artigo... //todos os mtodos necessrios estaro descritos nessa classe. //cria uma instncia de diretrio 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 no encontrou nada, o usurio naum existe e retorna false if (resultado.Count == 0) { return false; } else { return true;

} } #endregion Listagem 4 Mtodo que verifica se um usurio existe Por Enquanto s. Na segunda parte deste artigo veremos alguns outros mtodos que usaremos em nossa aplicao de gerenciamento do Active Directory.

http://www.devmedia.com.br/post-7338-Desenvolvendo-uma-solucao-em-Net-para-gerenciamento-de-usuarios-do-Active-Directory--Parte-II.html

Desenvolvendo uma soluo em .Net para gerenciamento de usurios do Active Directory - Parte IIContinuando a nossa seqncia de artigos para desenvolver uma soluo em .Net de gerenciamento de usurios do Active Directory...

Share

Desenvolvendo uma soluo em .Net para gerenciamento de usurios do Active Directory - Parte IIContinuando a nossa seqncia de artigos para desenvolver uma soluo em .Net de gerenciamento de usurios do Active Directory, vamos implementar mais alguns mtodos em nossa classe. Na parte 1, definimos a estrutura do nosso projeto e criamos nossa ClassLibrary que chamamos de: dllActiveDirectory. Terminamos o artigo implementando o mtodo VerificaUsuario. Vamos agora implementar quatro mtodos: CriarUsuario AlterarSenha HabilitaUsuario DesabilitaUsuario Obs: Conforme j citado na primeira parte desse artigo, a classe a ser implementada nesse projeto baseada em uma classe j existente. O primeiro mtodo a ser criado ser o mtodo HabilitaUsuario que responsvel por ativar a conta de usurio no AD. Em seguida ser implementado tambm o mtodo DesabilitaUsuario.Veja o cdigo dos mtodos na listagem abaixo. //mtodo habilita usurio public static void HabilitaUsuario(DirectoryEntry de) { object ent = de.NativeObject; Type type = ent.GetType(); type.InvokeMember("AccountDisabled", BindingFlags.SetProperty, null, ent, new object[] { false });

de.CommitChanges(); de.Close(); de.Dispose(); } //mtodo que desabilita um usurio public static void DesabilitaUsuario(DirectoryEntry de) { de.Properties["userAccountControl"][0] = ADParametrosContas.UF_NORMAL_ACCOUNT | ADParametrosContas.UF_DONT_EXPIRE_PASSWD | ADParametrosContas.UF_ACCOUNTDISABLE; de.CommitChanges(); de.Close(); } Listagem 1 Mtodos Habilita e Desabilita Usurios Dando continuidade a implementao dos mtodos, vamos implementar agora o mtodo AlterarSenha, que invoca o mtodo SetPassword para alterar a senha de um usurio. Veja na listagem 2 a codificao deste mtodo. public static void AlterarSenha(DirectoryEntry de, string Senha) { //invoca o mtodo SetPassword para troca a senha do usurio de.Invoke("SetPassword", new Object[] { Senha }); } Listagem 2 Mtodo Alterar