在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证。ASP.NET Core提倡的是基于声明(Claim)的授权
基本概念:
Claim:证件单元,存储信息最小单位
ClaimsIdentity相当于是一个证件;
ClaimsPrincipal 则是证件的持有者;
一个ClaimsPrincipal中可以有多个ClaimsIdentity,而一个ClaimsIdentity中可以有多个Claim。ASP.NET Core的授权模型大概就是这样的一个体系。
# 1: Claim:证件单元
Claim claim = new Claim(ClaimTypes.NameIdentifier, user.Code);
# 2: ClaimsIdentity:证件
public class ClaimsIdentity:IIdentity { public ClaimsIdentity(IEnumerable<Claim> claims){} public virtual string Name { get; }
public string Label { get; set; } //证件类型 public virtual string AuthenticationType { get; }
//是否是合法的证件。 bool IsAuthenticated { get; }
public virtual void AddClaim(Claim claim); public virtual void RemoveClaim(Claim claim); public virtual void FindClaim(Claim claim); }
# 3: ClaimsPrincipal:证件当事人
public class ClaimsPrincipal:IPrincipal { //把拥有的证件都给当事人 public ClaimsPrincipal(IEnumerable<ClaimsIdentity> identities){} //当事人的主身份呢 public virtual IIdentity Identity { get; } public virtual IEnumerable<ClaimsIdentity> Identities { get; }
//在否属于某个角色
bool IsInRole(string role);
public virtual void AddIdentity(ClaimsIdentity identity);
}
下面这个图是一个identity登入部分的不完全示意图,虚线圈出来的部分应该可以看懂了吧: