Вот, пожалуйста.ASP.NET заботится об этом за вас, когда вы используете методы более высокого уровня, встроенные в FormsAuthentication, но на низком уровне это требуется для создания файла cookie аутентификации.
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));
}
Я не уверен, почему вы хотите сделать что-то особенное здесь.Если вы хотите изменить реализацию того, где хранятся пользовательские данные и как аутентифицируются пользователи, лучше создать пользовательский MembershipProvider
.Использование собственного решения и использование файла cookie для проверки подлинности означает высокую вероятность появления дыр в безопасности вашего программного обеспечения.
Я не понимаю вашу часть 2. Вам нужно только вызвать FormsAuthentication.GetRedirectUrl, если вы хотите вернутьсяпользователи на страницу, к которой они пытались получить доступ, когда им было отказано в входе.Если вы не делаете то, что хотите, перенаправьте на URL-адрес, сохраненный в конфигурации, если хотите.
Чтобы прочитать файл cookie FormsAuthentication, обычно вы подключаете событие AuthenticateRequest
в HttpModule или Global.asax инастроить пользовательский 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;
}
}