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 em .Net para gerenciamento de usuários do Active Directory - Parte II

Continuando a nossa seqüência de artigos para desenvolver uma solução em .Net de gerenciamento de usuários do Active Directory...

GLB: 0

Desenvolvendo uma solução em .Net para gerenciamento de usuários do Active Directory  - Parte II

 

Continuando a nossa seqüência de artigos para desenvolver uma solução em .Net de gerenciamento de usuários do Active Directory, vamos implementar mais alguns métodos 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 método VerificaUsuario.

 

Vamos agora implementar quatro métodos:

·         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 método a ser criado será o método HabilitaUsuario que é responsável por ativar a conta de usuário no AD. Em seguida será implementado também o método DesabilitaUsuario.Veja o código dos métodos na listagem abaixo.

 

//método habilita usuário

        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();

        }

 

        //método que desabilita um usuário

        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 – Métodos Habilita e Desabilita Usuários

 

Dando continuidade a implementação dos métodos, vamos implementar agora o método AlterarSenha, que invoca o método SetPassword para alterar a senha de um usuário. Veja na listagem 2 a codificação deste método.

 

public static void AlterarSenha(DirectoryEntry de, string Senha)

        {

            //invoca o método SetPassword para troca a senha do usuário

            de.Invoke("SetPassword", new Object[] { Senha });

        }

Listagem 2 – Método Alterar Senha

 

Por último, é hora de codificar o método CriarUsuario , que utilizará os métodos criados anteriormente. Na listagem 3 temos a implementação desse método.

 

//MÉTODO PARA CRIAR UM NOVO USUÁRIO NO ACTIVE DIRECTORY

        public static DirectoryEntry CriarUsuario(string cn, string senha, string caminho, string nome)

        {

            string LDAPDomain = "/" + caminho + "," + GetLDAPDomain();

           

            //cria uma instância de diretório

            DirectoryEntry de= GetDirectoryObject(LDAPDomain);

            DirectoryEntry usuario = de.Children.Add("CN=" + nome, "user");

            //PROPRIEDADES DO USUÁRIO

            usuario.Properties["name"].Value = nome;

            usuario.Properties["sAMAccountName"].Value = cn;

            usuario.Properties["displayname"].Value = nome;

            usuario.Properties["userPrincipalName"].Value = cn;

            usuario.CommitChanges();

            //MÉTODO QUE ALTERAR A SENHA DO USUÁRIO

            AlterarSenha(usuario, senha);

            //COMMIT CHANGES EXECUTA E REALIZA AS INSERÇÕES/ALTERAÇÕES NA BASE DO AD

            usuario.CommitChanges();

            //Informa que o login será alterado na primeira vez que o usuário fizer o login no AD

            usuario.Properties["userAccountControl"].Value = AdsUserFlags.PasswordExpired;

            usuario.Properties["pwdLastSet"].Value = 0;

            usuario.CommitChanges();

 

            //CHAMA O MÉTODO PARA HABILITAR A CONTA DO USUÁRIO

            HabilitaUsuario(usuario);

            usuario.CommitChanges();

 

            de.Close();

            de.Dispose();

 

            return usuario;

        }

Listagem 3 – Método Criar Usuário

 

Até o momento nossa classe já possui os métodos: VerificaUsuario,Habilita e Desabilita Usuário, AlterarSenha e CriarUsuário. Com esses métodos já é possível começar a Desenvolver a interface para gerenciar os usuários. Primeiramente vamos desenvolver nosso aplicativo Windows  Forms proposto na parte 1. O aplicativo Windows Forms será responsável pela configuração da árvore de diretórios do Active Directory, na qual a estrutura das unidades organizacionais estarão armazenadas em um banco de dados no SQL Server.

 

Diante do cenário da aplicação que se baseia esse artigo:

 

“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.”

 

Foi necessário desenvolver um pequeno aplicativo Windows Forms que seria responsável por catalogar a árvore de diretórios do Active Directory em um banco de dados. Dessa forma quando era necessário cadastrar um usuário 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 compreensível como funciona uma arvore de diretório no AD, veja a imagem abaixo:

 

rmdguadp2fig01.jpg 

Figura 1 – Árvore de Diretórios do Active Directory

 

Através do Console acima, podemos verificar a estrutura de uma implementação do Active Directory. Do lado esquerdo temos as unidades organizacionais (OU) e do lado direito temos os usuários cadastrados. Os usuários marcados com um ícone VERMELHO com um X em branco estão com as contas inativas.

 

A partir da árvore de diretório acima, a idéia é desenvolver uma base de dados de forma a armazenar toda a estrutura dessa árvore de diretório. 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 usuários serão cadastrados nas unidades organizacionais:

·         Alunos

·         Professores

·         Convidado

 

Os alunos estão 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 estão 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 Diretórios funciona de forma HIERÁRQUICA, com uma Unidade Organizacional que pertence a uma outra Unidade Organizacional, e uma Unidade Raiz na quais as demais unidades serão criadas.

 

Após 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: contém o nome do Curso e uma Senha Padrão para que todos os usuários(alunos) pertencentes a um Curso tenha uma senha inicial padrão, que será alterada após o primeiro Login;

·         Departamento: contém o nome do Departamento e uma Senha Padrão para que todos os usuários(professores e convidados) pertencentes a um Departamento tenha uma senha inicial padrão, que será alterada após o primeiro Login;

·         Unidade: contém o nome da Unidade Organizacional;

·         CursoUnidade: contém o ID do curso, o ID da Unidade, o ID da unidade Pai, e o ID do Nó;

·         DepartamentoUnidade: contém 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 implementação do nosso banco de dados no diagrama abaixo:

 

rmdguadp2fig02.jpg 

Figura 2 – Base de Dados da Árvore Organizacional do AD

 

Com a base de dados implementada, quando um usuário for inserido no AD, existirá um método que retornará toda a estrutura da árvore organizacional de forma a inserir um usuário no local apropriado.

 

Após implementar a nossa tabela, é hora de desenvolver a solução em Windows Forms para gerência da árvore de diretórios. 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 solução 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 próximo.





    2 COMENTÁRIOS

[Fechar]

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



Randolf Loureiro Costa Brito
Parabéns prezado, Rapaz estou na finta da próxima parte deste artigo, muito interesante e de grande utilidade. Tem mais ou menos uma previsão de quando mandara a terceira parte? Grato. Randolf Brito


em 29/1/2008 11:09 - Responder

 

Waldnilso
Olá estou com uma dúvida nos método GetDirectorObject() e GetLDAPDomain() onde posso encontrar ?


em 10/2/2008 10:26 - 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:
3   0
[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