12

Esta es una de estas cosas que debería ser extremadamente simple y no puedo entender por qué no está funcionando.Autenticación a través de web.config no autenticando en ASP.net 3.5

Estoy intentando configurar una autenticación muy rápida para una aplicación ASP.net 3.5 pero almacenando los nombres de usuario y las contraseñas en el archivo web.config (sé que no es muy seguro pero es una aplicación interna que sigo recibiendo se le pidió que agregue y elimine los inicios de sesión, por lo que esta es la forma más rápida de hacerlo).

Por lo tanto, la sección de configuración correspondiente se parece a esto:

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx"> 
    <credentials> 
    <user name="user" password="password" /> 
    <user name="user2" password="password2" /> 
    </credentials> 
    </forms> 
    </authentication> 

    <authorization> 
    <deny users="?"/> 
    </authorization> 

Y, en la página de inicio de sesión, el aspecto código como este:

string username = tbUsername.Text; 
string password = tbPassword.Text; 

if (FormsAuthentication.Authenticate(username, password)) 
    FormsAuthentication.RedirectFromLoginPage(username, false); 

Pero, FormsAuthentication.Authenticate (nombre de usuario, contraseña) siempre devuelve falso. Y no puedo entender por qué.

Incluso intenté usar Membership.ValidateUser pero eso solo agrega en una base de datos local a la carpeta App_Data.

¿Hay algo realmente básico que estoy olvidando aquí o esto no funciona en absoluto en .net 3.5?

Respuesta

13

no estoy seguro de si esto ha cambiado en .NET 3.5, pero el elemento <credentials> tiene un atributo passwordFormat que define el formato de las contraseñas en el web.config. Desde MSDN documentation for .NET 3.5, el formato predeterminado es SHA1.

Si está utilizando nombres de usuario y contraseñas en texto claro en su web.config, se debe utilizar:

... 
<credentials passwordFormat="Clear"> 
... 

Evento aunque esto es una aplicación interna aun así sigo recomendando al menos hash de la contraseña en lugar de dejarlo en Borrar texto.

+0

Magia, eso fue todo! Un buen pedazo de la frente se encuentra con la palma cuando leo eso. Es increíble lo que olvidas un viernes por la tarde. ¡Muchas gracias! –

2

Debe especificar <credentials passwordFormat="Clear"> cuando almacena la contraseña en texto sin cifrar.

Las alternativas son contraseñas encriptadas usando MD5 o SHA1.

Consulte http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.hashpasswordforstoringinconfigfile.aspx para obtener una función para codificar una contraseña.

También puede considerar usar algunos de los controles de usuario disponibles que hacen mucho por usted automáticamente. Busque en la sección "Iniciar sesión" en la barra de herramientas de control en Visual Studio.

La siguiente página proporcionará todo lo necesario para este caso sencillo, y el aspecto del control de inicio de sesión es totalmente personalizable:

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
     e.Authenticated = FormsAuthentication.Authenticate(Login1.UserName, Login1.Password); 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Login</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Login ID="Login1" runat="server" onauthenticate="Login1_Authenticate"> 
     </asp:Login> 
    </div> 
    </form> 
</body> 
</html> 
2

Otra posible escollo que es que el nombre de usuario "admin" parece ser especial y no honrado si prueba una credencial en la web.no parece config

<credentials> 
<user name="Admin" password="somepassword" /> //Authentication always returns false for me 
</credentials> 

<credentials> 
<user name="MyName" password="somepassword" /> //Authentication works normally 
</credentials> 

El problema de aplicar en su caso, pero acabo de pasar una hora pensando que fuera, así que pensé que iba a grabar aquí.

-3

i encontrar esa solución ........ primero usted tiene que conseguir mediante el uso de hashvalue FormsAuthentication.HashPasswordForStoringInConfigFile ("abc", "SHA1") en el cuadro de texto mediante la ejecución de su programa y luego proporcionar este valor en

Cuestiones relacionadas