Aquí tienes. ASP.NET se ocupa de esto cuando utiliza los métodos de nivel superior integrados en FormsAuthentication, pero en el nivel bajo esto es necesario para crear una cookie de autenticación.
if (Membership.ValidateUser(username, password))
{
// sometimes used to persist user roles
string userData = string.Join("|",GetCustomUserRoles());
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // ticket version
username, // authenticated username
DateTime.Now, // issueDate
DateTime.Now.AddMinutes(30), // expiryDate
isPersistent, // true to persist across browser sessions
userData, // can be used to store additional user data
FormsAuthentication.FormsCookiePath); // the path for the cookie
// Encrypt the ticket using the machine key
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
// Add the cookie to the request to save it
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
// Your redirect logic
Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent));
}
No estoy seguro de por qué querría hacer algo personalizado aquí. Si desea cambiar la implementación de dónde se almacenan los datos del usuario y cómo se autentican los usuarios, se recomienda crear un MembershipProvider
personalizado. Hacer rodar tu propia solución y jugar con la cookie de autenticación significa una alta probabilidad de introducir agujeros de seguridad en tu software.
No entiendo su parte 2. Solo necesita llamar a FormsAuthentication.GetRedirectUrl si desea devolver a los usuarios a la página a la que estaban intentando acceder cuando se les devolvió el inicio de sesión. Si no haces lo que quieras aquí, redirige a una url almacenada en la configuración si quieres.
Para leer la cookie FormsAuthentication, normalmente conectaría el evento AuthenticateRequest
en un HttpModule o Global.asax y configuraría el contexto de usuario IPrinciple
.
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if(authCookie != null)
{
//Extract the forms authentication cookie
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
// If caching roles in userData field then extract
string[] roles = authTicket.UserData.Split(new char[]{'|'});
// Create the IIdentity instance
IIdentity id = new FormsIdentity(authTicket);
// Create the IPrinciple instance
IPrincipal principal = new GenericPrincipal(id, roles);
// Set the context user
Context.User = principal;
}
}
ur respuesta me ayuda ... puede u por favor, qué código que necesito escribir para leer el contenido de la cookie de autenticación después de la autenticación. FormsAuthentication.SetAuthCookie (userName, createPersistentCookie); SetAuthCookie crear una cookie de autenticación y tengo que escribir el contenido de esa cookie desde el lado del servidor? puedes ayudar por favor thnx. :) – Thomas
¿podemos crear una cookie de autenticación de formulario desde el lado del cliente utilizando jquery? – Thomas
He actualizado para mostrar también cómo también puede leer la cookie. No, no puede configurar esto desde el lado del cliente, ya que sería un riesgo de seguridad y no podría realizar el cifrado que requiere claves del lado del servidor. La cookie de autenticación siempre debe ser HttpOnly. La única forma sería realizar una solicitud de AJAX y dejar que la cookie se establezca en el lado del servidor, en cuyo caso debe asegurarse de que está pasando credenciales a través de SSL. – TheCodeKing