ASP.NET Core身份验证
2019-05-18 16:20
721 查看
asp.net core 身份验证
本文旨在演示如果使用内置的 identity 实现 asp.net core 的身份验证,不会进行其它扩展。本文将通过最简单的代码演示如何进行登录和身份验证操作。
使用Authentication
我们创建好 asp.net core 项目以后,需要在ConfigureServices中添加Authentication的服务配置,代码如下:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o => { o.LoginPath = new PathString("/Account/Login"); o.AccessDeniedPath = new PathString("/Account/AccessDenied"); });
然后,在Configure中添加上如下代码,注意,UseAuthentication要放在UseMvc前面。
app.UseAuthentication(); app.UseMvc().UseMvcWithDefaultRoute();
添加Account控制器
在完成第一步后,我们需要添加一个控制器,来进行登录、退出等操作,通常把这些功能放在AccountController中。关键代码如下:
/// <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的作用如下:
- Login - Get:用来响应Get请求,提供用户输入用户名、密码的页面。
- Login - Post:用来响应Post请求,对用户输入的用户名和密码进行验证,验证通过后分发票据
- Logout - Get:用来响应Get请求,退出登录。
获取用户身份
当用户通过上面的代码登录以后,在用户访问其它页面时,我们需要获取到用户的身份,为了演示如何获取到身份信息,我们想AccountController中添加一个Index页面,代码如下:
/// <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"); }
相关文章推荐
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 使用Cookie验证身份
- ASP.NET Core 使用Cookie验证身份
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 配置身份验证
- 详解ASP.NET Core和ASP.NET Framework共享身份验证
- ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统(转载)
- ASP.NET Core 使用Cookie验证身份
- ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 使用Cookie验证身份
- ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统
- ASP.NET Core 和 ASP.NET Framework 共享 Identity 身份验证
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 身份验证(一)
- Asp.Net Core-身份验证
- 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)
- asp.net的身份验证方式
- 实现Asp.net Forms身份验证的操作步骤详解
- ASP.NET Core的身份认证框架IdentityServer4--(3)令牌服务配置访问控制跟UI添加