学习ASP.NET Core的身份认证(基于Cookie的身份认证3)

用户通过验证后调用HttpContext.SignInAsync函数将用户的身份信息保存在认证Cookie中,以便后续的请求可以验证用户的身份,该函数原型如下所示,其中properties参数的主要属性已在前篇文章中学习,本文学习scheme和principal的意义及用法。

csharp 复制代码
public static Task SignInAsync(string? scheme, ClaimsPrincipal principal, AuthenticationProperties? properties);

ASP.NET Core项目启动时通过builder.Services.AddAuthentication可以注册多种认证方式,如Cookie、OAuth、JwtBearer等,在调用SignInAsync时指定需要使用的认证方式名称,也即赋予参数scheme特定的认证方式名称。
  SignInAsync函数的principal参数类型为ClaimsPrincipal ,对应的是微软的Identity框架,常用的是Claim、ClaimsIdentity、ClaimsPrincipal类,根据参考文献1中的介绍,这三者的关系是可以理解为ClaimsPrincipal代表当前登录用户,ClaimsIdentity为针对特定认证方式的认证信息实例,而Claim为认证信息明细。一般每个用户登录时创建一个ClaimsPrincipal对象,同步根据当前认证方式创建一个类型为ClaimsIdentity的认证信息集合对象,其内包含若干Claim信息实例。
  Claim类定义如下,从网上及微软帮助文档来看,主要还是直接调用构造函数指定type、value来创建实例对象,type参数类型为string,可以人工指定,也可以使用ClaimTypes静态类的预定义字符串。Claim代表认证信息明细,其可以保存用户名,也可以保存用户角色,用户有多个角色的话就创建多个Claim示例,后续在控制器类中可以根据用户角色进行访问控制。

创建ClaimsIdentity对象实例需要指定其对应的认证方式,然后就是调用AddClaim/AddClaims函数添加认证信息明细(Claim对象)。用户登录后在其它控制器中获取的HttpContext.User.Identity信息就是登录认证时产生的。

参考文献:

[1]https://www.cnblogs.com/fanfan-90/p/11918537.html

[2]https://blog.csdn.net/u010476739/article/details/104447807

[3]https://www.cnblogs.com/baiqian/p/11187812.html

[4]https://www.jianshu.com/p/7939a31b0941

[5]https://www.cnblogs.com/PenZ/p/10318501.html

[6]https://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authentication-and-owin.html

[7]https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-9.0\&tabs=visual-studio

相关推荐
gc_22991 小时前
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证4)
身份认证·jwtbear
gc_22993 天前
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证2)
身份认证·jwtbearer
安 当 加 密6 天前
中小学教室多媒体电脑安全登录解决方案
数据安全·访问控制·身份认证·日志审计·多因素认证·操作系统登录双因素认证
安 当 加 密7 天前
【安当产品应用案例100集】032-重塑企业SaaS平台的PostgreSQL凭据管理体系
数据库·数据安全·访问控制·身份认证·加密技术·凭据管理
棉晗榜9 天前
.net core在linux导出excel,System.Drawing.Common is not supported on this platform
linux·excel·asp.net core·miniexcel
棉晗榜9 天前
asp.net core发布配置端口号,支持linux
asp.net core
coredx11 天前
如何优雅地让 ASP.NET Core 支持异步模型验证
asp.net core
小乖兽技术19 天前
ASP.NET Core Web 项目的部署:选择 IIS 还是 Kestrel?
后端·kestrel·iis·asp.net·asp.net core
界面开发小八哥21 天前
DevExtreme JS & ASP.NET Core v24.2新功能预览 - 全新的聊天组件
javascript·ui·asp.net core·界面控件·ui开发·devextreme·.net 9
枫叶丹421 天前
【在Linux世界中追寻伟大的One Piece】HTTP cookie
linux·运维·服务器·http·cookie