Come posso creare manualmente un cookie di autenticazione invece del metodo predefinito?

Usando FormsAuthentication scriviamo codice come questo:

  if (IsValidUser()) { FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie); } 
  1. Come posso creare manualmente un cookie di autenticazione invece di scrivere FormsAuthentication.SetAuthCookie(userName, createPersistentCookie) ?

  2. Come posso memorizzare un URL di reindirizzamento dalla pagina di accesso in una variabile stringa invece di scrivere FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie) ?

Ecco qui. ASP.NET si prende cura di questo per te quando usi i metodi di livello superiore incorporati in FormsAuthentication, ma a livello basso ciò è necessario per creare un cookie di autenticazione.

 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)); } 

Non sono sicuro del perché vorresti fare qualcosa di personalizzato qui. Se si desidera modificare l’implementazione di dove sono archiviati i dati utente e come gli utenti si autenticano, è consigliabile creare un MembershipProvider personalizzato. Rollare la propria soluzione e fare casino con il cookie di autenticazione significa un’alta probabilità di introdurre buchi di sicurezza nel software.

Non capisco la tua parte 2. Devi solo chiamare FormsAuthentication.GetRedirectUrl se vuoi restituire gli utenti alla pagina a cui stavano cercando di accedere quando sono stati rimandati al login. Se non fai ciò che vuoi qui, reindirizza a un url archiviato nella configurazione, se lo desideri.

Per leggere il cookie FormsAuthentication, normalmente si aggancia l’evento AuthenticateRequest in un HttpModule o Global.asax e si imposta il contesto IPrinciple dell’utente.

 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; } } 

l’altro modo di creare un cookie,

 HttpCookie toolCookie = new HttpCookie("xyz"); toolCookie["UserName"] = userName; toolCookie["Password"] = StringCipher.Encrypt(password, "#!"); toolCookie.Expires = DateTime.Now.AddMinutes(chkRemember.Checked ? 30 : -30); Request.Cookies.Add(toolCookie); 

Riferimento

Ottieni i dettagli dei cookie esistenti

 HttpCookie user = Request.Cookies["xyz"]; if(user != null) { string username = user["UserName"]; string password = user["Password"] != null ? StringCipher.Decrypt(user["Password"], "#!") } 

qui Datasecurity è una class statica.

Encrypt and Decrypt function Encrypt e Decrypt