网站,首先需要安全,实现安全就必须使用登录验证,.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的登录验证就是这些,如果有错误请指正。

最新文章

  1. Net中对Object的定义
  2. U-BOOT分析之:环境变量
  3. FBI阅人术——用最短的时间了解一个人
  4. windows重建图标缓存(解决快捷方式图标丢失,图标加载时间长问题)
  5. Java算法-插入排序
  6. ES6 中的 Set、Map 和 WeakMap
  7. 如何利用VS2010安装和部署应用程序
  8. 了解开源的许可证GPL、LGPL、BSD、Apache 2.0的区别 【转】
  9. $.ajax传递字符串到后台,后台返回json对象
  10. vpn的实现原理
  11. ajax 状态码
  12. poj3358 Period of an Infinite Binary Expansion
  13. 开源软件:NoSql数据库 - 图数据库 Cassandra
  14. Scala:提取器(Extractor)
  15. rest-framework的认证组件
  16. 2017-2018-2 20165206 实验二《Java面向对象程序设计》实验报告
  17. 查看集成环境 phpstudy 中 mysql 版本号
  18. 解决javah生成c头文件时找不到android类库的问题
  19. 使用unidac 在linux 上无驱动直接访问MS SQL SERVER
  20. 「PKUSC2018」真实排名(排列组合,数学)

热门文章

  1. 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
  2. linux php多版本
  3. Qt判断鼠标在控件上
  4. wpf 转型 android开发总结
  5. 微软智能云的核心DNA
  6. mysql 配置详解
  7. 【Leetcode】【Medium】Best Time to Buy and Sell Stock
  8. Jsonp实现Ajax跨域Demo
  9. APUE1.11:系统调用 库函数
  10. 双十一问题:kafka消费能力低下原因思考