El uso Personalizado de MembershipProvider sin un control de inicio de Sesión en ASP.NET
-
09-06-2019 - |
Pregunta
Tenemos una costumbre MembershipProvider
en ASP.NET
.Ahora hay 2 escenarios posibles, el usuario puede validar:
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 laMyMembershipProvider
.Esto está funcionando perfectamente bien.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 mismoMembershipProvider
para validar el usuario sin utilizar realmente el Control de inicio de sesión?Traté de llamarValidate
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
}
}
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
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.