在ASP.net MVC .netframework 4.8中,使用的身份验证方式是System.Web.Security.FormsAuthentication,而在ASP.net MVC Core 6中使用的是Microsoft.AspNetCore.Authentication。
要实现两个版本之间的用户身份验证共享,可以采用以下步骤:
在ASP.net MVC .netframework 4.8中,使用System.Web.Security.FormsAuthentication将用户身份验证令牌以cookie的方式保存在浏览器中。
在ASP.net MVC Core 6中,使用Microsoft.AspNetCore.Authentication.Cookies将从ASP.net MVC .netframework 4.8中传递过来的用户身份验证令牌解密,并验证身份。
在ASP.net MVC .netframework 4.8中的代码示例:
var ticket = new FormsAuthenticationTicket(
1,
user.UserName,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
userData,
FormsAuthentication.FormsCookiePath);
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(
FormsAuthentication.FormsCookieName,
encryptedTicket);
HttpContext.Response.Cookies.Add(cookie);
在ASP.net MVC Core 6中的代码示例:
services
.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.Name = FormsAuthentication.FormsCookieName;
options.Cookie.Path = FormsAuthentication.FormsCookiePath;
options.TicketDataFormat =
new FormsAuthenticationTicketDataFormat(
FormsAuthentication.FormsCookieName);
});
public class FormsAuthenticationTicketDataFormat :
ISecureDataFormat
{
private readonly string _cookieName;
private readonly FormsAuthenticationTicketSerializer _serializer;
public FormsAuthenticationTicketDataFormat(string cookieName)
{
_cookieName = cookieName;
_serializer = new FormsAuthenticationTicketSerializer();
}
public string Protect(AuthenticationTicket data)
{
throw new NotImplementedException();
}
public AuthenticationTicket Unprotect(string protectedText)
{
var cookie = HttpContext.Request.Cookies[_cookieName];
var ticket = FormsAuthentication.Decrypt(cookie.Value);
return _serializer.Deserialize(ticket.UserData);
}
}
上一篇:ASP.netMVC.netframework4.8和ASP.netMVCCore6之间的共享用户身份无法工作。
下一篇:ASP.netMVC.netframework4.8和ASP.netMVCCore6之间的共享用户身份不起作用。