[.Net Core] - 当 .Net Core 版本由 1.x 升级至 2.x 后,Cookie 使用方式变更
背景
Asp.Net Core 项目升级至 2.x 版本后,Cookie 验证方式需要进行更新。
升级前:.Net Core 1.x
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
// Other Options ...
// IMPORTANT: UseCookieAuthentication() MUST before UseMvc() app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = "MyCookieMiddlewareInstance", LoginPath = new PathString("/Home/Index/"), AccessDeniedPath = new PathString("/Home/AccessDenied/"), AutomaticAuthenticate = true, AutomaticChallenge = true, CookiePath = "/" }); // Add MVC to the request pipeline. app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); }
Login
var claims = new List<Claim> { new Claim(ClaimTypes.Email, user.Email), new Claim(ClaimTypes.Name, user.Name), new Claim(ClaimTypes.Sid, Convert.ToString(user.Gid)) }; var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "AccountLogin")); var property = new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTime.UtcNow.AddHours(1) }; await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal, property); return RedirectToAction(nameof(LoginController.Index), "Candidate");
Logout
HttpContext.Session.Clear(); await HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance"); return RedirectToAction(nameof(HomeController.Index), "Home");
升级后:.Net Core 2.x
Startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication("MyCookieAuthenticationScheme") .AddCookie("MyCookieAuthenticationScheme", options => { options.SlidingExpiration = false; options.ExpireTimeSpan = TimeSpan.FromHours(1); options.Cookie = new CookieBuilder { HttpOnly = true, Name = "MyCookie", Path = "/" }; options.LoginPath = "/Home/Index/"; options.AccessDeniedPath = "/Home/AccessDenied/"; }); services.AddMvc();
// Other Options ... } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { // Other Options ...
app.UseAuthentication();
// Add MVC to the request pipeline. app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); }
Login
var claims = new List<Claim> { new Claim(ClaimTypes.Email, user.Email), new Claim(ClaimTypes.Name, user.Name), new Claim(ClaimTypes.Sid, Convert.ToString(user.Gid)) }; var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "AccountLogin")); await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal); return RedirectToAction(nameof(CandidateController.Index), "Candidate");
Logout
HttpContext.Session.Clear(); await HttpContext.SignOutAsync("MyCookieAuthenticationScheme"); return RedirectToAction(nameof(HomeController.Index), "Home");
参考资料(了解更多细节)
https://www.cnblogs.com/tdfblog/p/aspnet-core-security-authentication-cookie.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】