定义了AuthenticationScheme,认证方案,通过AddIdentity添加了默认的身份验证体系(Cookie)。
至此,可以简单总结一下:
一、Identity
为系统提供帐户、角色功能模块,可以新增、更新、删除帐户和角色。
同时SignInManager提供了登录时,验证帐户密码。
SignInManager中提供了CreateUserPrincipalAsync,登录成功后创建ClaimsPrincipal
这里的调用过程如下:
PasswordSignInAsync -> SignInOrTwoFactorAsync -> SignInWithClaimsAsync -> CreateUserPrincipalAsync
ClaimsPrincipal,可以理解为“身份证”,那这个身份证会存在哪里呢?
HttpContext类有一个扩展方法(文件名AuthenticationHttpContextExtensions),SignInAsync方法;
之后继续调用AuthenticationService类中的SignInAsync方法;
接下来会判断并调用对应Scheme中AuthenticationHandler类的SignInAsync方法,这个方法实际来自于 SignInAuthenticationHandler 类中的SignInAsync方法,然后转调用HandleSignInAsync方法。
按Cookie方案,身份信息将保存在Cookie中。
二、Authentication
为系统提供身份验证功能,包括五大块:
- HandleAuthenticateAsync:执行身份验证
- HandleChallengeAsync:身份不明时,执行相关操作,通常跳转到登录页
- HandleForbiddenAsync:身份明确,权限不足时执行相关操作,通常跳转到一个提示页
- HandleSignInAsync:将身份证保存下来
- HandleSignOutAsync:销毁身份证
用Cookie方案来分析一下,它的继承层级是:
CookieAuthenticationHandler
–》SignInAuthenticationHandler
—-》SignOutAuthenticationHandler
——》AuthenticationHandler(开始转入Security文件夹)
——–》IAuthenticationHandler(这个位于HTTP文件夹下)
身份验证完了,系统哪些地方可以访问,哪些地方不能访问,还需要继续用Authorization这一块处理。