当前位置: 首页 > news >正文

.NET Core中鉴权 Authentication Authorization

  • Authentication: 鉴定身份信息,例如用户有没有登录,用户基本信息

  • Authorization: 判定用户有没有权限

使用框架提供的Cookie鉴权方式

1.首先在服务容器注入鉴权服务和Cookie服务支持

services.AddAuthentication(options =>
{options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;//不能少options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;options.DefaultChallengeScheme = "Cookie/Login";
})
.AddCookie(options =>{});

2.注册鉴权和授权中间件,用于在管道中调用拦截校验鉴权和授权

app.UseAuthentication();
app.UseAuthorization();         

3.在控制器引入特性 [Authorize] ,调用登录接口时使用HttpContext.SignInAsync()写入鉴权信息

        [AllowAnonymous][HttpPost]public async Task<IActionResult> LoginAsync(string name, string password){//用户名密码不正确直接返回if (!"Admin".Equals(name) || !"123456".Equals(password)){return new JsonResult(new { Result = false, Message = "登录失败" });}var claimIdentity = new ClaimsIdentity("Cookie");claimIdentity.AddClaim(new Claim(ClaimTypes.Name, name));claimIdentity.AddClaim(new Claim(ClaimTypes.Email, "MyEmail@qq.com"));claimIdentity.AddClaim(new Claim(ClaimTypes.System, "EmployeeManager"));var Properties = new AuthenticationProperties{ExpiresUtc = DateTime.UtcNow.AddMinutes(30),};//写入鉴权信息await base.HttpContext.SignInAsync(new ClaimsPrincipal(claimIdentity), Properties);return new JsonResult(new { Result = true, Message = "登录成功" });}

4.因为调用 HttpContext.AuthenticateAsync() 获取鉴权的步骤,由第二部注册的中间件AuthenticationMiddleware已经替我们完成,所以可以直接在控制器内部获取HttpContext.User信息,系统提供的相对于自己实现的,框架帮我们封装了获取鉴权信息,并把它加入管道中,而不用每次在控制器中手动获取鉴权信息。

        [HttpGet]public IActionResult Authentication(){//这里由中间件管道已经实现了鉴权信息取值var CookiesInfo = base.HttpContext.User;if (CookiesInfo != null){return new JsonResult(new { Result = true, Message = $"鉴权认证成功,用户已登录" });}return new JsonResult(new { Result = true, Message = $"鉴权认证失败,用户未登录" });}
http://www.lryc.cn/news/264559.html

相关文章:

  • PyTorch深度学习实战(26)——卷积自编码器(Convolutional Autoencoder)
  • Milvus实战:构建QA系统及推荐系统
  • 使用Docker部署Nexus Maven私有仓库并结合Cpolar实现远程访问
  • GEE-Sentinel-2月度时间序列数据合成并导出
  • 【深度学习】语言模型与注意力机制以及Bert实战指引之二
  • 计算机网络 网络层下 | IPv6 路由选择协议,P多播,虚拟专用网络VPN,MPLS多协议标签
  • 【MATLAB第83期】基于MATLAB的LSTM代理模型的SOBOL全局敏感性运用
  • 求奇数的和 C语言xdoj147
  • 全链路压力测试:解析其主要特点
  • 算法基础之约数个数
  • 【ECharts】折线图
  • java jdbc连接池
  • unity2d 关闭全局重力
  • 大数据时代,如何基于机密虚拟化技术构建数据安全的“基石”
  • 为你自己学laravel - 15 - model的更新和删除
  • 列举mfc140u.dll丢失的解决方法,常见的mfc140u.dll问题
  • 智能优化算法应用:基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • DC-8靶场
  • SQL Server 安装教程
  • 快猫视频模板源码定制开发 苹果CMS 可打包成双端APP
  • 【C++】理解string类的核心理念(实现一个自己的string类)
  • conda 虚拟环境使用
  • C# 使用MSTest进行单元测试
  • 基于Java (spring-boot)的宠物管理系统
  • 基于博弈树的开源五子棋AI教程[1 位棋盘]
  • Java Catching and Handling Exceptions(二)
  • 【HarmonyOS开发】ArkTs关系型和非关系型数据库的存储封装
  • Latex编译出来的pdf文件缺少参考文献和交叉引用
  • sql_lab靶场搭建以及存在的一些问题
  • Https接口调用问题