Neste artigo tento demonstrar como implementar segurança para sites em ASP.Net da forma mais completa, para isso foi criado um protótipo que esta disponível no Codplex e possui a seguinte estrutura.



Começando o projeto “framework” que é a biblioteca de classes que possui as classes de acesso ao Active Directory. Diagrama abaixo demonstra a relação entre essas classes.


O segundo projeto é o site que irá utilizar o “framework” para autenticar no Active Directory. Este projeto possui duas páginas onde a página Login.aspx realiza a autenticação e a página Inicio.aspx é a página para onde é redirecionado após a autenticação.
O Trecho de código a seguir é a implementação do evento do botão que faz a autenticação e que está na página Login.aspx

using framework;

......

protected void Button1_Click(object sender, EventArgs e)
{            
   lblMensagem.Text = null;
   //...
   LDAP _autenticar = new LDAP("ldap=<ip AD>;domain=<domínio>");
   AuthenticationStatus _status = _autenticar.validate(txtLogin.Text, txtSenha.Text);
   //...
   if (_status)                                          //Se válido
       this.singIn(_status.user.userName);
   else if (_status == AuthenticationIndex.PasswordFail)//Se login ou senha incorreto
       lblMensagem.Text = "Login ou senha inválido(s)";
   else                                                 //Se qualquer outro erro
       lblMensagem.Text = _status.message;                
}
Outra questão importante de destacar é a configuração do Web.config para a configuração da segurança que no protótipo esta da seguinte forma.
<configuration>
  <system.web>
    ... ... ...
    <authentication mode="Forms">
      <forms
    loginUrl="~/Login.aspx" defaultUrl="~/Inicio.aspx" protection="All"
    timeout="2880" name="frmLogin" path="/" requireSSL="false"
    slidingExpiration="true" enableCrossAppRedirects="false"
      />
    </authentication>
    <authorization>
      <deny users="?" />
    </authorization>
    <machineKey
    validationKey="AutoGenerate" decryptionKey="AutoGenerate"
    validation="SHA1"
    />
  </system.web>
</configuration>