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 :

[Este post ainda não foi associado a uma sequência]
Você está em:
canal .net
Publicidade
Nelson Borges
Desenvolvedor .NET & SQL Server (MCP-MCTS-MCPD)
Blog Pessoal..Clique para acessar
Space do autor
Blog Pessoal..Clique para acessar
Space do autor

Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL

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