/ / Comment puis-je créer manuellement un cookie d'authentification au lieu de la méthode par défaut? - asp.net

Comment créer manuellement un cookie d'authentification au lieu de la méthode par défaut? - asp.net

En utilisant FormsAuthentication nous écrivons du code comme ceci:

 if (IsValidUser())
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie);
}
  1. Comment créer manuellement un cookie d'authentification au lieu d'écrire FormsAuthentication.SetAuthCookie(userName, createPersistentCookie)?

  2. Comment puis-je stocker une URL de redirection à partir de la page de connexion dans une variable chaîne au lieu d'écrire FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie)?

Réponses:

81 pour la réponse № 1

Voici. ASP.NET s'en charge pour vous lorsque vous utilisez les méthodes de niveau supérieur intégrées à FormsAuthentication, mais au niveau inférieur, cela est nécessaire pour créer un cookie d'authentification.

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

Je ne suis pas sûr de savoir pourquoi vous voudriez créer quelque chose de personnalisé ici. Si vous souhaitez modifier l’implémentation du lieu où les données utilisateur sont stockées et le mode d’authentification des utilisateurs, il est recommandé de créer un environnement personnalisé. MembershipProvider. Faire rouler votre propre solution et jouer avec le cookie d'authentification signifie qu'il est très probable que votre logiciel présente des failles de sécurité.

Je ne comprends pas votre partie 2. Vous devez uniquement appeler FormsAuthentication.GetRedirectUrl si vous souhaitez que les utilisateurs retournent à la page à laquelle ils essayaient d'accéder lorsqu'ils ont été renvoyés pour se connecter. Si vous ne faites pas ce que vous voulez ici, redirigez-le vers une URL enregistrée dans la configuration si vous le souhaitez.

Pour lire le cookie FormsAuthentication, vous devez normalement accrocher le AuthenticateRequest événement dans un HttpModule ou le Global.asax et configurer l'utilisateur IPrinciple le contexte.

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

-8 pour la réponse № 2

l'autre façon de créer 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);

Référence

Obtenir les détails du cookie existant

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

Ici, Datasecurity est une classe statique.

Fonction de chiffrement et de déchiffrement Crypter décrypter