active directory directory searcher

Upload: ruialeixo

Post on 14-Jul-2015

466 views

Category:

Documents


0 download

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 Senha Por ltimo, hora de codificar o mtodo CriarUsuario , que utilizar os mtodos criados anteriormente. Na listagem 3 temos a implementao desse mtodo. //MTODO PARA CRIAR UM NOVO USURIO NO ACTIVE DIRECTORY public static DirectoryEntry CriarUsuario(string cn, string senha, string caminho, string nome) { string LDAPDomain = "/" + caminho + "," + GetLDAPDomain(); //cria uma instncia de diretrio

DirectoryEntry de= GetDirectoryObject(LDAPDomain); DirectoryEntry usuario = de.Children.Add("CN=" + nome, "user"); //PROPRIEDADES DO USURIO usuario.Properties["name"].Value = nome; usuario.Properties["sAMAccountName"].Value = cn; usuario.Properties["displayname"].Value = nome; usuario.Properties["userPrincipalName"].Value = cn; usuario.CommitChanges(); //MTODO QUE ALTERAR A SENHA DO USURIO AlterarSenha(usuario, senha); //COMMIT CHANGES EXECUTA E REALIZA AS INSERES/ALTERAES NA BASE DO AD usuario.CommitChanges(); //Informa que o login ser alterado na primeira vez que o usurio fizer o login no AD usuario.Properties["userAccountControl"].Value = AdsUserFlags.PasswordExpired; usuario.Properties["pwdLastSet"].Value = 0; usuario.CommitChanges(); //CHAMA O MTODO PARA HABILITAR A CONTA DO USURIO HabilitaUsuario(usuario); usuario.CommitChanges(); de.Close(); de.Dispose(); return usuario; } Listagem 3 Mtodo Criar Usurio At o momento nossa classe j possui os mtodos: VerificaUsuario,Habilita e Desabilita Usurio, AlterarSenha e CriarUsurio. Com esses mtodos j possvel

comear a Desenvolver a interface para gerenciar os usurios. Primeiramente vamos desenvolver nosso aplicativo Windows Forms proposto na parte 1. O aplicativo Windows Forms ser responsvel pela configurao da rvore de diretrios do Active Directory, na qual a estrutura das unidades organizacionais estaro armazenadas em um banco de dados no SQL Server. Diante do cenrio da aplicao que se baseia esse artigo: Implementar uma soluo para que os gerentes dos setores, colegiados, departamentos pudessem criar facilmente usurios para funcionrios, alunos, servidores, professores, e etc. Foi necessrio desenvolver um pequeno aplicativo Windows Forms que seria responsvel por catalogar a rvore de diretrios do Active Directory em um banco de dados. Dessa forma quando era necessrio cadastrar um usurio no sistema em um determinado caminho da rvore, o sistema iria buscar na base de dados qual o caminho completo de uma unidade organizacional. Para deixar mais compreensvel como funciona uma arvore de diretrio no AD, veja a imagem abaixo:

Figura 1 rvore de Diretrios do Active Directory Atravs do Console acima, podemos verificar a estrutura de uma implementao do Active Directory. Do lado esquerdo temos as unidades organizacionais (OU) e do lado direito temos os usurios cadastrados. Os usurios marcados com um cone VERMELHO com um X em branco esto com as contas inativas.

A partir da rvore de diretrio acima, a idia desenvolver uma base de dados de forma a armazenar toda a estrutura dessa rvore de diretrio. Para isso estarei usando o Microsoft SQL Server 2005 Express. Antes de desenvolver a base de dados, irei explicar como funciona a estrutura do AD para esse projeto: Os usurios sero cadastrados nas unidades organizacionais: Alunos Professores Convidado Os alunos esto alocados em um COLEGIADO, que pertence a um DEPARTAMENTO. Veja exemplo da estrutura de um ALUNO: UESC -> DCAA -> COLEGIADO AGRONOMIA -> ALUNOS Os professores e convidados esto alocados em um DEPARTAMENTO. Veja exemplo da estrutura de um PROFESSOR e VISITANTE: UESC -> DCAA -> PROFESSORES UESC -> DCAA -> CONVIDADO Sendo assim, podemos concluir que a rvore de Diretrios funciona de forma HIERRQUICA, com uma Unidade Organizacional que pertence a uma outra Unidade Organizacional, e uma Unidade Raiz na quais as demais unidades sero criadas. Aps compreender a estrutura do AD, hora de implementar nosso banco de dados. Dessa forma, crie uma nova base de dados no SQL SERVER (DataBase -> New DataBase). Nossa base de dados possuir as seguintes tabelas: Curso: contm o nome do Curso e uma Senha Padro para que todos os usurios(alunos) pertencentes a um Curso tenha uma senha inicial padro, que ser alterada aps o primeiro Login; Departamento: contm o nome do Departamento e uma Senha Padro para que todos os usurios(professores e convidados) pertencentes a um Departamento tenha uma senha inicial padro, que ser alterada aps o primeiro Login; Unidade: contm o nome da Unidade Organizacional; CursoUnidade: contm o ID do curso, o ID da Unidade, o ID da unidade Pai, e o ID do N; DepartamentoUnidade: contm o ID do departamento, o ID da Unidade, o ID da unidade Pai, e o ID do N. As tabelas CursoUnidade e DepartamentoUnidade foram criadas para armazenar a hierarquia da rvore organizacional, mantendo dessa forma o numero do n atual e qual o n pai correspondente. Veja a implementao do nosso banco de dados no diagrama abaixo:

Figura 2 Base de Dados da rvore Organizacional do AD Com a base de dados implementada, quando um usurio for inserido no AD, existir um mtodo que retornar toda a estrutura da rvore organizacional de forma a inserir um usurio no local apropriado. Aps implementar a nossa tabela, hora de desenvolver a soluo em Windows Forms para gerncia da rvore de diretrios. O desenvolvimento desse projeto em Windows Forms ser apresentado na parte 3 deste artigo. Antes disso quero deixar alguns links interessantes para quem for trabalhar com Active Directory em dotnet ou mesmo implementar uma soluo como a descrita nesse projeto. Segue a lista abaixo: 1. http://www.c-sharpcorner.com/UploadFile/ecabral/ ADand.NET08242005065451AM/ADand.NET.aspx 2. http://www.codeproject.com/dotnet/activedirquery.asp 3. http://www.15seconds.com/issue/020730.htm 4. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/ adschema/attributes.asp At o prximo.

http://www.devmedia.com.br/space.asp?id=158309

ltimas 20 atualizaes de REGILAN MEIRA SILVA

[email protected]

Regilan Meira Silva ([email protected]), Bacharel em Cincia da Computao pela Universidade Estadual de Santa Cruz(UESC) em Ilhus, Bahia e Especialista em Administrao de Sistemas da Informao pela Universidade Federal de Lavras em Lavras, Minas Gerais. Trabalha com desenvolvimento de sistemas em .Net h quatro anos como desenvolvedor Windows Application e Web Application em C# e Visual Basic.Net Trabalhou como programador,analista de sistemas para o Governo da Bahia e atualmente Professor de Informtica do CEFET-BA. Para maiores informaes, voc poder visitar o site do autor: www.regilan.com

:: ltimas Atualizaes

:: Todas Atualizaes

:: Todos Comentrios Arquivo de atualizaes2008

2007

2006

Estatsticas do Autor:Nmero de posts: 35

Total de visualizaes: 436183

Caractersticas dos posts deste autor:Contedo: Didtica: Utilidade: 67 22DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br 2010 - Todos os Direitos Reservados a DevMedia Group