.net core中登录认证---中间件认证
.net core中登录认证---中间件认证
介绍:这是基于授权认证中间件认证的示例
第一步:
在 app.UseRouting();之后,在app.UseEndpoints()之前,增加鉴权授权; 鉴权: app.UseAuthentication();---检测用户是否登录 授权:app.UseAuthorization();//授权 检测有没有权限,是否能够访问后续的页面功能
第二步:在ConfigureServices中中增加如下
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = new PathString("/Login/Login"); //如果授权失败,就跳转到这个路径去中 //options.AccessDeniedPath = new PathString("/Home/Privacy"); });//用cookie
第三步:第三步:指定哪些Action需要做鉴权授权,标记特性:标记在哪个Action上,哪个Action就能够支持鉴权授权,也可以标记在控制器,全局;
[Microsoft.AspNetCore.Authorization.Authorize]
第四步: 登录时使用鉴权
[HttpPost]
[AllowAnonymousAttribute] //这是匿名,加上他会避开权限检查 public IActionResult Login(string name,string password) { string verifyCode = base.HttpContext.Session.GetString("CheckCode"); if (!string.IsNullOrEmpty(verifyCode)) { } #region 鉴权:鉴权,检测有没有登录,登录的是谁,赋值给User //rolelist 是登录成功后用户的角色---是来自于数据库的查询;不同的用户会查询出不同的角色; var rolelist = new List<string>() { "Admin", "Teacher", "Student" }; //ClaimTypes.Role就是做权限认证的标识; var claims = new List<Claim>()//鉴别你是谁,相关信息 { new Claim(ClaimTypes.Role,"Admin"), new Claim(ClaimTypes.Name,name), new Claim("password",password),//可以写入任意数据 new Claim("Account","Administrator"), new Claim("role","admin"), new Claim("zhaoxi","zhaoxi"), new Claim("User","zhaoxi") }; foreach (var role in rolelist) { claims.Add(new Claim(ClaimTypes.Role, role)); } ClaimsPrincipal userPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, "Customer")); HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(30),//过期时间:30分钟 }).Wait(); #endregion var user = HttpContext.User; return base.Redirect("/Home/Index"); }
第五步:鉴权授权角色授权,不同的用户,可能会存在不同的角色,不同的角色,可能在访问不同的页面的时候,需要做不同拦截;----角色授权其实就是通过角色不同,做不同的权限拦截;
[Authorize(Roles = "Admin,Teacher,Student")]
六、用户退出登录
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
谢谢学习!!!关注我,每天进步一点点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2019-03-14 session常用操作
2019-03-14 cookie的常用操作