正文转自: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”

图片 1😉

"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😉

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

图片 3😉

     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?}");
            });
        }

图片 4😉

3、创建一个初的 Controller,并上加登录的办法,大致如下:

图片 5😉

     [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");

        }

图片 6😉

4、退出登录方法:

图片 7😉

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

图片 8😉

5、获取用户信息:

图片 9😉

        [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 });
        }  

图片 10😉

 

 

外说明:

此间转的Cookie是加密了的,大概如下:

图片 11

连锁的Cookie名称,域,过期光阴相当还得以以 Startup.cs
中开展设置,大概如下:

图片 12😉

            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,不允许。
            });

图片 13😉

 

手续非常简单,也是最最好用之,若构成是否自动启用验证的AutomaticAuthenticate来进行Area分区域认证,灵活性更胜。

 

相关文章

网站地图xml地图