本文旨在演示若是使用内置的 identity 实现 asp.net core 的身份验证,不会进行其它扩展。本文将经过最简单的代码演示如何进行登陆和身份验证操做。app
咱们建立好 asp.net core 项目之后,须要在ConfigureServices中添加Authentication的服务配置,代码以下:asp.net
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o => { o.LoginPath = new PathString("/Account/Login"); o.AccessDeniedPath = new PathString("/Account/AccessDenied"); });
而后,在Configure中添加上以下代码,注意,UseAuthentication要放在UseMvc前面。async
app.UseAuthentication(); app.UseMvc().UseMvcWithDefaultRoute();
在完成第一步后,咱们须要添加一个控制器,来进行登陆、退出等操做,一般把这些功能放在AccountController中。关键代码以下:ide
/// <summary> /// 登陆页面 /// </summary> /// <returns></returns> public IActionResult Login() { return View(); } /// <summary> /// 模拟登陆 /// </summary> /// <param name="userName"></param> /// <returns></returns> [HttpPost] public async Task<IActionResult> Login(string userName) { //根据登陆名获取用户身份,以及判断密码等操做 var user = new SysUserIdentity { Name = userName, IsAuthenticated = true }; if (user != null) { user.AuthenticationType = CookieAuthenticationDefaults.AuthenticationScheme; var identity = new ClaimsIdentity(user); identity.AddClaim(new Claim(ClaimTypes.Name, user.Name)); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity)); return Redirect("/Account"); } ViewBag.Errormessage = "登陆失败,用户名密码不正确"; return View(); } /// <summary> /// 退出登陆 /// </summary> /// <returns></returns> public async Task<IActionResult> Logout() { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return Redirect("/Account"); }
每个Action的做用以下:.net
当用户经过上面的代码登陆之后,在用户访问其它页面时,咱们须要获取到用户的身份,为了演示如何获取到身份信息,咱们想AccountController中添加一个Index页面,代码以下:code
/// <summary> /// 获取登陆人信息 /// </summary> /// <returns></returns> [Authorize] public async Task<IActionResult> Index() { var auth = await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme); if (auth.Succeeded) { string userName = auth.Principal.Identity.Name; //从新获取用户身份 var user = new SysUserIdentity() { Name = userName, IsAuthenticated = true }; return View(user); } return Redirect("~/Account/Login"); }