lunes, 12 de noviembre de 2012

Autenticación usando componente login e indicando los usuarios en Web.config


Primero agregamos algunas entradas al web.config

comentamos la entrada que por defecto trae el web.config
<!--<authentication mode="Windows" />--> 
Por este otro código:   
  <authentication mode="Forms">
        <forms loginUrl="Login.aspx">
          <credentials passwordFormat="SHA1">
            <user name="uname"
                password="C56944C9F7AAE05AB22B36486C6006B3A4DCBB1C" />
            
          </credentials>
        </forms>
      </authentication>
Como pueden notar estamos guardando el nombre de usuario y el password encriptado con SHA1
y al final del archivo ponemos este otro código:
<location path="report.aspx"> <!-- con esto espesificamos que la pagina report.aspx requiere autenticacion -->
    <system.web>
      <authorization>
        <deny users="?" /> <!-- solo usuarios autenticados tienen acceso -->
      </authorization>
    </system.web>
  </location>
Luego creamos una pagina (webform) para crear el formulario de login, insertamos un componente login
<table width="100%">
    <tr><td align="center">
    <asp:Login ID="LoginPage" runat="server" OnAuthenticate="Login1_Authenticate"
 LoginButtonText="Login" RememberMeText="Remember me" TitleText="" BackColor="#EFF3FB" 
            BorderColor="#B5C7DE" BorderPadding="4" BorderStyle="Solid" BorderWidth="1px" 
            Font-Names="Verdana" Font-Size="0.8em" ForeColor="#333333">
        <InstructionTextStyle Font-Italic="True" ForeColor="Black" />
        <LoginButtonStyle BackColor="White" BorderColor="#507CD1" BorderStyle="Solid" 
            BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284E98" />
        <TextBoxStyle Font-Size="0.8em" />
        <TitleTextStyle BackColor="#507CD1" Font-Bold="True" Font-Size="0.9em" 
            ForeColor="White" />
</asp:Login>
 </td></tr>   
<tr><td  align="center"><br />
<asp:TextBox ID="txtClave" runat="server"> &nbsp;</asp:TextBox> <asp:Button ID="button" Text="Generate SHA1" runat="server" OnClick="btnCrearSHA1_Click" />

<br />
    <asp:Label ID="txtClaveSHA1" runat="server"></asp:Label>
    </td></tr>
 </table>   
Luego programamos el evento Authenticate:
  Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As AuthenticateEventArgs)
         Dim aceptado As Boolean = False

        ' Usando claves encriptadas con SHA1
        If FormsAuthentication.Authenticate(LoginPage.UserName, LoginPage.Password) Then
            aceptado = True
        Else
            aceptado = False
        End If


        ' redirigirlo a la página "principal", por defecto: Default.aspx
        If aceptado Then
            FormsAuthentication.RedirectFromLoginPage(LoginPage.UserName, False)
      
        End If

    End Sub
Con este codigo vamos a generar SHA1 para guardar en el config
   Protected Sub btnCrearSHA1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        txtClaveSHA1.Text = FormsAuthentication.HashPasswordForStoringInConfigFile(txtClave.Text, "SHA1")
    End Sub
La interface se vería algo así:





Se puede descargar el codigo fuente de aqui:
http://code.msdn.microsoft.com/Autenticacin-usando-70dfbc46