核心概念
Claims : 表示用户信息的一些键值对, 如姓名: 张三, 年龄: 25, 地址: 北京中关村......
ClaimsIdentity : 表示一张 / 一种身份证明, 或者你直接理解为是身份证. 它是由多个 Claim 组成的.
ClaimsPrincipal : 一般来讲, 一个人会有多重身份, 如丈夫, 学生, 教师......, 对应的就会有多个 "身份证明"(就是证明身份的证件): 结婚证, 学生证, 教师证, 此时就需要有个容器来携带这些证件了, 它就是: ClaimsPrincipal, 这个词怎么翻译呢? 我们先来看一下 principal 的名词意思: 首长, 负责人; 主要演员, 主角; [法] 委托人, 当事人; 本金; 所以暂时就叫它为: 证件当事人, 但是总觉得怪怪的, 所以就改一下, 叫它证件持有者; 另外, 我认为 ClaimsPrincipal 这个类的名字应该叫成 ClaimsIdentityPrincipal, 可能是出于简化的目的, 才简写的.
核心接口及中间件
IAuthenticationHandler : 对于特定方案, 为每个请求创建处理认证的处理器. 它是一个接口, 只有四个方法: AuthenticateAsync(),ChallengeAsync,ForbidAsync,InitializeAsync. 如果你需要重写认证相关的东西, 则实现这个接口.
Authentication 中间件 : 这个中间件中, 写了一个抽象类 AuthenticationHandler, 初步实现了 IAuthenticationHandler, 把具体的核心功能交给下游的实现类来完成.
ASP.NET identity UserSecurityStamp 的作用
UserSecurityStamp 主要是用来对用户安全相关的信息做一个快照. 在使用 ASP.NET identity 的 CreateAsync(TUser user) 创建一个用户的时候, 如果开启了 SupportsUserSecurityStamp 那么就会生成一个 UserSecurityStamp 的 claim 添加到用户的 claims 中去. 应用场景, 假如说用户修改了密码或者是修改了角色, 退出等涉及到用户安全相关的时候, 这个时候数据库这个值就会改变. 假如要读取浏览器 cookie 的账号密码做自动登录, 可以通过检测 cookie 的这个值和数据库的这个值进行对比, 从而可以使用户重新登录, 更新 cookie, 或者其他一些操作缓存清空等.
未完待续......
来源: http://www.bubuko.com/infodetail-3175549.html