.net core 基于Claim登录验证
2024-09-30 16:20:49
网站,首先需要安全,实现安全就必须使用登录验证,.net core 基于Claim登录验证就很简单使用。
Claim是什么,可以理解为你的身份证的中的名字,性别等等的每一条信息,然后Claim组成一个ClaimIdentity 就是组成一个身份证。
那么我们.net core 是如何基于Claim实现登录验证呢
首先我们需要在startup中配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o =>
{
o.LoginPath = new PathString("/Login"); // 登录页面的url
o.AccessDeniedPath = new PathString("/Login");//没有授权跳转的页面
o.ExpireTimeSpan = TimeSpan.FromHours(0.5); // cookies的过期时间
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication(); //添加中间件
}
然后我们需要在我们的登录用户名和密码的表中添加这个字段
/// <summary>
/// 属性标识此身份验证模块实现的身份验证类型
/// </summary>
public string AuthenticationType { get; internal set; }
然后我们在登录的控制器写登录方法
/// <summary>
/// 登录
/// </summary>
/// <param name="name">用户名</param>
/// <param name="password">密码</param>
/// <returns></returns>
[HttpGet("login/{name}/{password}")]
public async Task<IActionResult> Login(string name, string password)
{
var user = userLogicHandler.GetUsers(name, password);
if (user !=null)
{
user.AuthenticationType = CookieAuthenticationDefaults.AuthenticationScheme;
var identity = new ClaimsIdentity(user.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserId));
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
return Ok();
}
else
{
return Ok();
}
}
登录的时候上传密码和名称到服务器中,如果匹配,那么服务器会将ClaimsIdentity保存到客户端中的cookies中,然后每次请求需要验证的控制器的时候就会验证是否有ClaimIdentity。
[Hidden]
[Route("Home")]
[Authorize]
public class HomeController : Controller
{
/// <summary>
/// 主界面
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Home()
{
return View();
}
如上,加上[Authorize] 特性之后,每次请求该控制器的方法都会验证。
基于Claim的登录验证就是这些,如果有错误请指正。
最新文章
- Net中对Object的定义
- U-BOOT分析之:环境变量
- FBI阅人术——用最短的时间了解一个人
- windows重建图标缓存(解决快捷方式图标丢失,图标加载时间长问题)
- Java算法-插入排序
- ES6 中的 Set、Map 和 WeakMap
- 如何利用VS2010安装和部署应用程序
- 了解开源的许可证GPL、LGPL、BSD、Apache 2.0的区别 【转】
- $.ajax传递字符串到后台,后台返回json对象
- vpn的实现原理
- ajax 状态码
- poj3358 Period of an Infinite Binary Expansion
- 开源软件:NoSql数据库 - 图数据库 Cassandra
- Scala:提取器(Extractor)
- rest-framework的认证组件
- 2017-2018-2 20165206 实验二《Java面向对象程序设计》实验报告
- 查看集成环境 phpstudy 中 mysql 版本号
- 解决javah生成c头文件时找不到android类库的问题
- 使用unidac 在linux 上无驱动直接访问MS SQL SERVER
- 「PKUSC2018」真实排名(排列组合,数学)