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:

Login C# com Autenticação LDAP com ADAM

Neste artigo você irá aprender como autenticar uma aplicação usando o ADAM LDAP do Windows Server.

Olá,
Com o crescente aumento da tecnologia, cada vez mais as empresas estão informatizando todos seus processos e suas áreas, por isso nesse cenário é comum você encontrar em uma empresa com mais de um sistema operando, e caso esta empresa não tenha uma arquitetura da infra-estrutura correta, a mesma irá ter dificuldades em controlar todos estes sistemas. Um grande desafio dos administradores de sistemas é unificar operações comuns, e uma das operações  é a que iremos abordar neste artigo, trata-se de um sistema de login integrado com o ADAM LDAP, dessa forma você poderá usar o mesmo usuário do Windows para se autenticar no sistema.
Requisitos para o Exemplo ->
Neste nosso exemplo iremos usar o Visual Studio 2008 com Framework 3.5, caso não tenha instalado, efetue o download gratuitamente no seguinte site :  http://www.microsoft.com/Express/  Será necessário baixar o ADAM este poderá ser baixado  em http://www.microsoft.com/downloads/details.aspx?FamilyId=9688F8B9-1034-4EF6-A3E5-2A2A57B5C8E4&displaylang=en, e por ultimo iremos utilizar em nosso cenário autenticação do tipo LDAP e por isso iremos usar uma API chamda Client.NET LDAP ele é bem intuitiva o que torna este exemplo simples de compreender, para baixar acesse o seguinte endereço: http://www.ldapservices.com/Products/LdapClient.Net/default.aspx.
Antes de ir direto para o código é necessário que tenhamos um conhecimento do processo de autenticação do Windows. O Microsoft ADAM (Active Directory Application Mode) é um servidor LDAP para aplicação de desenvolvedores ele é  gratuito e fácil de instalar e pode “crescer” em full-Blown, e também é simples de usar uma vez que ele é executado em um ambiente Windows com a autenticação NTLM e/ou com LDAP.
Instalando o ADAM  ->
1-) Criando uma instancia no ADAM : Após efetuar o download e instalar os pré-requisitos acima, inicie o ADAM Setup Wizard, clicando em Iniciar -> Programas -> ADAM -> Create an ADAM Instance.

Imagem 02 – Criando Instancia do ADAM
2-) Coloque o nome da Instancia como LDAP1, o número da porta LDAP deixe como 389 e a porta para o SSL deixe como 636, conforme imagem abaixo.

Imagem 03 – Portas da Configuração do ADAM
3-) Crie uma partição para sua aplicação conforme imagem 04 abaixo,

Imagem 04 – Partition ADAM
4-) Após configurar o ADAM, clique em Avançar e aguarde que o ADAM crie a Instancia LDAP. Quando este processo estiver concluído, você terá um diretório vazio com o MS-User  Schema instalado. Você poderá se conectar a ele apenas com o ADSI.
Criando uma conta de usuário no ADSIEdit ->
1-) Nós usaremos o ADSIEdit para criar dois novo usuários. O primeiro usuáio será administrador e o segundo usuário terá uma conta de serviço para a aplicação asp.net.
2-)  Vá em Iniciar -> Programa -> ADAM -> ADAM ADSI Edit, clique com o botão direito em ADAM ADSI Edit e selecione Connecto to -> Seleciona Configuration na tela que irá se abrir deixe conforme a imagem abaixo, importante estar no modo Distinguished name (DN) or naming context e no textbox estar desta forma: cn=Sandbox, dc=ITOrg.

Imagem 05 – Connection ADAM
3-)  Agora, precisamos criar um Container para armazenar o nossos usuários. Vá para o CN= Sandbox, DC=ITOrg container, botão direito e selecione New Object, selecione Container e clique em Next. Na tela que irá abrir preencha o value como PEOPLE, e clique em next posteriormente Finish para criar o container.
4-) Vá até o container CN=PEOPLE  criado anteriormente, botão direito e escolha a opção New Object , selecione usuário e clique em Next. Na tela que irá abrir preencha o value como SUPERUSER, e clique em next posteriormente Finish para criar o usuário.

Nota: Por padrão no Windows Server ADAM quando se cria um usuário sempre irá criar a conta desabilitada, para usar modifique o atributo do usuário sua msDS-UserAccountDisabled atributo para false

 
5-) No usuário defina a senha para p@ss0word, pronto nossa estrutura já esta pronta para testarmos os usuários com autenticação LDAP.
 
Finalmente Código ->
 Bom, finalmente chegamos na parte mais interessante, codificar nosso sistema, após todos os passos seguidos anteriormente, agora iremos criar uma aplicação web que irá testar a autenticação.
1-) Abra o VS 2008, clique em File -> New -> Project -> Na tela que irá se abrir escolha ASP.NET Web Application, no campo NAME digite LdapAuth o nome da SOLUTION pode deixar com LdapAuth, conforme imagem abaixo.


Imagem 01 – Criando o Projeto

2-) Na pagina Default, insira 2 textBox, 3 Label e um Button, deixando conforme imagem06

Imagem 06 – Controles da Página

Nota: No Label Superior deixe a propriedade Visible com False, pois esta mensagem apenas irá aparecer caso o login falhe.

 
                3-) Abra o arquivo Default.cs  e iremos para a codificação dos métodos para validar o usuário e senha digitados na página acima.
                - Faça a referência a DLL do LDAP.Client instalado anteriormente.

using LdapServices.Ldap;

 
                - Crie um método para validar a autenticação veja abaixo:

      private bool Authenticate(string username, string password)
    {
        bool authenticated = false;
 
        using (LdapServices.Ldap.Client client = new LdapServices.Ldap.Client())
        {
            try
            {
                // Verifica o usuário e senha se estiver correto
                // Atribui a variavel true a variavel authenticate
                // ou seja usuário é válido
                LdapConnectionConfigurationSection config = LdapConnectionConfigurationSection.Current;
                client.Connect(config.Server, config.Port,username, password);
 
                //Buscar o perfil do usuário
                //Após buscar o perfil que o usuário possui
                // Vc poderá montar os acessos que o usuário terá no site;
                GetRolesForUser(username); //Método abaixo para pegar roles do usuário;
                LdapRoleCache.Current.Remove(username);
                authenticated = true;
            }
            catch (LdapException)
            {
                //Retorna um usuário inválido
                errorLabel= "Usuario ou Senha incorretos";
                authenticated = false;
            }
        }
 
        return authenticated;
    }
}

  
4-) Partindo do pressuposto que as credenciais do usuário são validas, é necessário verificar qual perfil ele esta associado, desta maneira podemos definir as permissões que ele terá no sistema. O GetRolesForUser realiza esta tarefa.

private string[] GetRolesForUser(string username)
    {
        string[] roles = LdapRoleCache.Current[username];
 
        if (roles == null)
        {
            using (LdapServices.Ldap.Client client = new LdapServices.Ldap.Client())
            {
                // Abra a conexão com o LdapConnectionConfigurationSection;
                LdapConnectionConfigurationSection config = LdapConnectionConfigurationSection.Current;
                client.Connect(config.Server, config.Port, config.User, config.Password);
                LdapServices.Ldap.EntryCollection userEntries = client.Search(config.BaseDn, "distinguishedName=" + username);
 
                if (userEntries.Count == 1)
                {
                    //Pega as roles associados com o usuaário;
                    LdapServices.Ldap.Attribute memberOf = userEntries[0].Attributes["memberof"];
 
                    // Copia os valores para um array de string;
                    roles = new string[memberOf.Values.Count];
                    for (int i = 0; i < memberOf.Values.Count; i++)
                    {
                        string adamGroupName = memberOf.Values[i].StringValue;
 
                        //Retirando as virgulas do array e trocando por pontos.
                        roles[i] = adamGroupName.Replace(',', '.');
                    }
 
                    // Salvando informações do role do usuário no cache Ldap.
                    LdapRoleCache.Current[username] = roles;
                }
            }
        }
        // Se usuário não possuir nenhuma role associada a ele manter array roles como vazio.
        if (roles == null)
        {
            roles = new string[] { };
        }
 
        return roles;
    }


                5-) Por fim, agora iremos associar a chamada dos métodos a o evento do botão logar da página, para isso basta apenas dar um duplo clique no botão e inserir o código abaixo:

protected void LoginButton_Click(object sender, EventArgs e)
    {
        string username = UsernameTextBox.Text;
        string password = PasswordTextBox.Text;
 
        if (this.Authenticate(username, password))
        {
            FormsAuthentication.RedirectFromLoginPage(username, false);
        }
        else
        {
            this.errorLabel.Visible = true;
        }
    }

 
Antes de iniciarmos os testes das paginas, iremos fazer algumas alterações no web.config, iremos alterar o modo de autenticação para Forms Authentication, para mais informações acesse: http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Default.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>
                  <deny users="?" />
                   <allow users=
"*" />
      </authorization>
    </system.web>

 
E chegamos ao final do artigo, agora você já pode testar sua página usando a autenticação LDAP com o ADAM, nos próximos artigos irei mostrar como criar paginas para o controle de usuários como Criação, Edição, Habilitar e Desabilitar uma conta e vincular Roles, então, até lá.
Referências :




    0 COMENTÁRIO

[Fechar]

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


Nenhum comentário foi postado - seja o primeiro a comentar!



[Este post ainda não foi associado a uma sequência]
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação 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