写在前面
ASP.NET Core Identity是一个会员系统,ASP.NET Core Identity封装了User、Role、Claim等身份信息,便于我们快速完成登录功能的实现,它允许你向应用程序添加登录功能。用户可以使用用户名和密码创建登录账户,也可以使用QQ、微信、Fackbook、Microsoft等外部账号提供程序登录。
1. 认证流程
在ASP.NET Core中使用的是基于申明(Claim)的认证,而什么是申明(Cliam)呢?
Claim 是关于一个人或组织的某个主题的陈述,比如:一个人的姓名,角色,个人喜好,种族,特权,社团,能力等等。它本质上就是一个键值对,是一种非常通用的保存用户信息的方式,可以很容易的将认证和授权分离开来,前者用来表示用户是/不是什么,后者用来表示用户能/不能做什么。在认证阶段我们通过用户信息获取到用户的Claims,而授权便是对这些的Claims的验证,如:是否拥有Admin的角色。也可以这样理解,比如去游玩区游玩,认证就是看你是否有权限进入大门,而授权就是看你是否有权限玩一个项目。
认证主要与以下几个核心对象打交道:
Claim(身份信息)
ClaimsIdentity(身份证)
ClaimsPrincipal (身份证持有者)
AuthorizationToken (授权令牌)
IAuthenticationScheme(认证方案)
IAuthenticationHandler(与认证方案对应的认证处理器)
IAuthenticationService (向外提供统一的认证服务接口)
那其认证流程是怎样的呢?
(1)用户打开登录界面,输入用户名密码先行登录,服务端先行校验用户名密码是否有效,有效则返回用户实例(User)。
(2)这时进入认证准备阶段,根据用户实例携带的身份信息(Claim),创建身份证(ClaimsIdentity),然后将身份证交给身份证持有者(ClaimsPrincipal)持有。
(3)接下来进入真正的认证阶段,根据配置的认证方案(IAuthenticationScheme),使用相对应的认证处理器(IAuthenticationHandler)进行认证 。认证成功后发放授权令牌(AuthorizationToken)。该授权令牌包含后续授权阶段需要的全部信息。
2. 授权流程
授权就是对于用户身份信息(Claims)的验证,,授权又分以下几种:
基于Role的授权
基于Scheme的授权
基于Policy的授权
授权主要与以下几个核心对象打交道:
IAuthorizationRequirement(授权条件)
IAuthorizationService(授权服务)
AuthorizationPolicy(授权策略)
IAuthorizationHandler (授权处理器)
AuthorizationResult(授权结果)
2.那授权流程是怎样的呢?
当收到授权请求后,由授权服务(IAuthorizationService)根据资源上指定的授权策略(AuthorizationPolicy)中包含的授权条件(IAuthorizationRequirement),找到相对应的授权处理器(IAuthorizationHandler )来判断授权令牌中包含的身份信息是否满足授权条件,并返回授权结果。
可以将ASP.NET Core Identity配置为使用SQL Server数据库来存储用户名、密码和配置文件等数据。当然也可以使用MongoDB等来存储对应数据。