本文转自:http://www.cnblogs.com/Joes/p/6023820.html

在以前的Asp.Net中可以用 FormsAuthentication 类的一系列方法来使用加密的Cookie存储用户身份,使用简单,可控性强。在Asp.Net Core中是否也可以的?答案是当然的。

使用步骤:

1、在 project.json 中添加项目依赖 "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0"

"dependencies": {"Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform" }, "Microsoft.AspNetCore.Diagnostics": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.1", "Microsoft.AspNetCore.Razor.Tools": { "version": "1.0.0-preview2-final", "type": "build" }, "Microsoft.AspNetCore.Routing": "1.0.1", "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", "Microsoft.AspNetCore.StaticFiles": "1.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", "Microsoft.Extensions.Configuration.Json": "1.0.0", "Microsoft.Extensions.Logging": "1.0.0", "Microsoft.Extensions.Logging.Console": "1.0.0", "Microsoft.Extensions.Logging.Debug": "1.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0" }

2、在 Startup.cs 中添加中间件:

     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = "member",  // Cookie 验证方案名称,后面多处都需要用到,部分地方必须要求常量,所以直接配置为字符串。 AutomaticAuthenticate = true,     // 是否自动启用验证,如果不启用,则即便客服端传输了Cookie信息,服务端也不会主动解析。                               // 除了明确配置了 [Authorize(ActiveAuthenticationSchemes = "上面的方案名")] 属性的地方,才会解析,此功能一般用在需要在同一应用中启用多种验证方案的时候。比如分Area. LoginPath = "/account/login"     // 登录页 }); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }

3、创建一个新的 Controller,并添加登录的方法,大致如下:

     [AllowAnonymous]public async Task<IActionResult> Login(){// 这里应该写业务逻辑来获取用户名,用户Id等信息。 var userId = 10000; var userName = "admin"; // ======================== var identity = new ClaimsIdentity("Forms"); // 指定身份认证类型  identity.AddClaim(new Claim(ClaimTypes.Sid, userId.ToString()));  // 用户Id identity.AddClaim(new Claim(ClaimTypes.Name, userName));       // 用户名称 var principal = new ClaimsPrincipal(identity); await HttpContext.Authentication.SignInAsync("member", principal, new AuthenticationProperties { IsPersistent = true });       string returnUrl = Request.Query["returnUrl"];       if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);       return RedirectToAction("index", "account");
        }

4、退出登录方法:

        public async Task<IActionResult> Logout(){await HttpContext.Authentication.SignOutAsync("member");   // Startup.cs中配置的验证方案名        return RedirectToAction("index", "home");      } 

5、获取用户信息:

        [Authorize(ActiveAuthenticationSchemes = "member")]public IActionResult Index() { var userId = User.FindFirst(ClaimTypes.Sid).Value; var userName = User.Identity.Name; return Json(new { Id = userId, Name = userName }); } 

其它说明:

这里生成的Cookie是加密过的,大概如下:

相关的Cookie名称,域,过期时间等都可以在 Startup.cs 中进行设置,大概如下:

            app.UseCookieAuthentication(new CookieAuthenticationOptions{AuthenticationScheme = "member",    // 验证方案名 AutomaticAuthenticate = true, // 是否自动启用验证 LoginPath = "/account/login", // 登录地址 CookieDomain = "abc.com", // 验证域 CookieName = "abc", // Cookie 名称 CookiePath = "/", // Cookie 路径 ExpireTimeSpan = TimeSpan.FromDays(3), // 过期时间 SlidingExpiration = true, // 是否在过期时间过半的时候,自动延期 CookieHttpOnly = true // 是否允许客户端Js获取。默认True,不允许。 });

步骤很简单,也是极好用的,若结合是否自动启用验证的AutomaticAuthenticate来进行Area分区域认证,灵活性更强。

[转]Asp.Net Core 简单的使用加密的Cookie保存用户状态相关推荐

  1. ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)

    ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64) 七牛图片上传 SDK(.NET 版本):https://developer.qiniu.com/kodo/sdk/ ...

  2. 保护我方Id | ASP.NET Core Web API使用加密Id

    前言 上次,我们介绍了hashids.net,可以将数值型Id加密成无意义的字符串,但是通过这些字符串又可以反向映射出真实的Id以供内部使用.比如B站的播放链接https://www.bilibili ...

  3. Asp.Net Core简单整理

    1.Asp.NetCore 中文入门文档 http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-index.html 2..Net Core官网 https ...

  4. 【ASP.NET Core】解决“The required antiforgery cookie xxx is not present”的错误

    当你在页面上用 form post 内容时,可能会遇到以下异常: The required antiforgery cookie "????????" is not present ...

  5. ASP.NET CORE[练习8]-Identity-用户角色、给用户分配角色、角色校验

    练习+博客,量化自己的进步! 用户管理.用户登录已经完成,下面开始做用户角色,以及给用户分配角色. 1.角色管理 2.给用户分配角色 3.角色校验 角色管理 角色管理使用到了RoleManager,同 ...

  6. ASP.NET Core 认证与授权[2]:Cookie认证

    ASP.NET Core 认证与授权[2]:Cookie认证 原文:ASP.NET Core 认证与授权[2]:Cookie认证 由于HTTP协议是无状态的,但对于认证来说,必然要通过一种机制来保存用 ...

  7. .ASP NET Core中缓存问题案例

    本篇博客中,我将描述一个关于会话状态(Session State)的问题, 这个问题我已经被询问了好几次了. 问题的场景 创建一个新的ASP.NET Core应用程序 一个用户在会话状态中设置了一个字 ...

  8. ASP.NET Core 认证与授权[1]:初识认证

    在ASP.NET 4.X 中,我们最常用的是Forms认证,它既可以用于局域网环境,也可用于互联网环境,有着非常广泛的使用.但是它很难进行扩展,更无法与第三方认证集成,因此,在 ASP.NET Cor ...

  9. 为什么我的会话状态在ASP.NET Core中不工作了?

    原文:Why isn't my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookie ...

最新文章

  1. 视频|深度相机与应用
  2. copy,mutableCopy,retain区别
  3. corba中IDL接口传值中文报错问题
  4. 数字三角形:顺推法(二维数组)
  5. 使用PYTORCH复现ALEXNET实现MNIST手写数字识别
  6. mysql 锁命令_MySQL锁定状态查看命令
  7. golang实现聊天室(三)
  8. vue项目引入CNZZ数据专家(方法汇总篇)
  9. 解读业界5种主流的深度网络模型
  10. 第二冲刺阶段工作总结10
  11. mongodb由于目标计算机积极拒绝无法连接失败
  12. Spring Boot 官方文档学习(一)入门及使用
  13. 学习spring的入门好书:Professional Java Development with the Spring Framework
  14. 三丰三坐标编程基本步骤_日常皮肤护理的基本三步骤,问题皮肤不要作
  15. 用Hexo制作自己的静态博客
  16. 做正确的事和正确的做事的区别
  17. linux重启数据库11g,linux下重启oracle数据库
  18. 今日芯声 | 从“罪犯”到“英镑人物”,图灵比肩英国女王
  19. Processing创意编程(进阶篇)
  20. 赵小楼《天道》《遥远的救世主》深度解析(35)你觉得叶晓明、冯世杰、刘冰是底层吗?

热门文章

  1. Python学习之并发基础知识
  2. 【Qt开发】常用控件--QLineEdit
  3. 17.1.1.3 Creating a User for Replication
  4. prototype 1.5 中文说明.doc
  5. ASP中利用OWC控件实现图表功能详解[zz]
  6. 网易哲学气质H5看似眼熟,为什么大家还是忍不住转发?
  7. 10次迭代9次delay??拒绝项目延期,这里有一整套方法!
  8. 【Party】现在只是一张普通的照片,以后可能就是历史。
  9. 【产品】腾讯内部的顶级产品课:灵动在细节
  10. 团购硝烟慢慢散去之时:从团购身上我们可以学到什么?