美文网首页
ASP.NET Core认证与授权验证模型

ASP.NET Core认证与授权验证模型

作者: 谁有羊毛 | 来源:发表于2019-08-05 11:49 被阅读0次

英文资料:introduction-to-authentication
一、 阐述基本

  1. 认证,读作 Authentication ,就是一种身份的确认,即:是谁?who are you?
  2. 授权,读作 Authorisation,表示的是给某个身份赋予权,即:能干啥?what can I do?

二、AspNet Core中的体现

  1. ASP.NET Core 的验证模型是 claims-based authentication 。Claim 是对被验证主体特征的一种表述,比如:登录用户名是...,email是...,用户Id是...,其中的“登录用户名”,“email”,“用户Id”就是ClaimType。
  2. Claim表示一个特征或属性,比如:身份证中的姓名、住址、生日....
  3. 而多个Claim构成一个Identity,故具有这些Claims的就是ClaimsIdentity
public class ClaimsIdentity: IIdentity
{
    public string AuthenticationType { get; }
    public bool IsAuthenticated { get; }
    public IEnumerable<Claim> Claims { get; }

    public Claim FindFirst(string type) { /*...*/ }
    public Claim HasClaim(string type, string value) { /*...*/ }
}
  1. 单个Identity只是表示单个身份,而一个持有者(ClaimsPrincipal)则可以具有多个Identity
public class ClaimsPrincipal :IPrincipal
{
    public IIdentity Identity { get; }
    public IEnumerable<ClaimsIdentity> Identities { get; }
    public IEnumerable<Claim> Claims { get; }

    public bool IsInRole(string role) { /*...*/ }
    public Claim FindFirst(string type) { /*...*/ }
    public Claim HasClaim(string type, string value) { /*...*/ }
}

三、代码表示就是

var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, user.Email),
    new Claim("FullName", user.FullName),
    new Claim(ClaimTypes.Role, "Administrator"),
};

var claimsIdentity = new ClaimsIdentity(
    claims, CookieAuthenticationDefaults.AuthenticationScheme);

var authProperties = new AuthenticationProperties();

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, 
    new ClaimsPrincipal(claimsIdentity),  authProperties);

相关文章

网友评论

      本文标题:ASP.NET Core认证与授权验证模型

      本文链接:https://www.haomeiwen.com/subject/lfipdctx.html