gpt4 book ai didi

asp.net - 如何手动创建身份验证 cookie 而不是默认方法?

转载 作者:行者123 更新时间:2023-12-03 01:25:40 28 4
gpt4 key购买 nike

使用FormsAuthentication我们编写如下代码:

 if (IsValidUser())
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie);
}
  1. 如何手动创建身份验证 Cookie,而不是编写 FormsAuthentication.SetAuthCookie(userName, createPersistentCookie)

  2. 如何将登录页面的重定向 URL 存储在字符串变量中,而不是编写 FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie)

最佳答案

给你。当您使用 FormsAuthentication 中内置的更高级别的方法时,ASP.NET 会为您处理这个问题,但在低级别上,这是创建身份验证 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(如果您愿意)。

要读取 FormsAuthentication cookie,通常您需要在 HttpModule 或 Global.asax 中 Hook AuthenticateRequest 事件,并设置用户 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;
}
}

关于asp.net - 如何手动创建身份验证 cookie 而不是默认方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com