El uso Personalizado de MembershipProvider sin un control de inicio de Sesión en ASP.NET

StackOverflow https://stackoverflow.com/questions/41652

  •  09-06-2019
  •  | 
  •  

Pregunta

Tenemos una costumbre MembershipProvider en ASP.NET.Ahora hay 2 escenarios posibles, el usuario puede validar:

  1. Inicio de sesión de usuario a través de login.aspx página introduciendo su nombre de usuario/contraseña.He utilizado Control de inicio de sesión y la vincula con la MyMembershipProvider.Esto está funcionando perfectamente bien.

  2. Un token de autenticación se pasa a través de la parte de la URL en la cadena de consulta de forma diferente sitios web.Para esto tengo una sobrecarga en MembershipProvider.Validate(string authenticationToken), que en realidad es validar el usuario.En este caso no podemos utilizar el Control de inicio de sesión.Ahora, ¿cómo puedo utilizar el mismo MembershipProvider para validar el usuario sin utilizar realmente el Control de inicio de sesión?Traté de llamar Validate manualmente, pero esto no es la firma del usuario.

Aquí está el fragmento de código que estoy utilizando

if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
    string ticket = Request.QueryString["authenticationToken"];
    MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
    if (provider != null) {
        if (provider.ValidateUser(ticket))
            // Login Success
        else
            // Login Fail
    }
}
¿Fue útil?

Solución

Después de la validación es exitosa, usted necesita para iniciar sesión en el usuario, llamando FormsAuthentication.Autenticar: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

EDITAR:Es FormsAuthentication.SetAuthCookie:http://msdn.microsoft.com/en-us/library/twk5762b.aspx

También, para redirigir al usuario a volver donde él quería ir, llame al:FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

enlace de texto

Otros consejos

Usted puede configurar su propia FormsAuthenticationTicket si la validación es correcta.

Algo como esto;

if (provider != null) {
    if (provider.ValidateUser(ticket)) {
        // Login Success
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
            1, //version
            someUserName, //name
            DateTime.Now, //issue date
            DateTime.Now.AddMinutes(lengthOfSession), //expiration
            false, // persistence of login
            FormsAuthentication.FormsCookiePath
        );

        //encrypt the ticket
        string hash = FormsAuthentication.Encrypt(authTicket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

        Response.Cookies.Add(cookie);
        Response.Redirect(url where you want the user to land);
    } else {
        // Login Fail  
    }   
}

Tienes razón en el caso de almacenamiento de la autenticación de la información como una cookie directamente.Pero el uso de una fuerte función de hash (por ejemplo,MD5 + SHA1) es grande y seguro.Por cierto, si el uso de sesiones (que es también sólo un hash de la galleta), se podría adjuntar la autenticación de la información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top