用例子看ASP.NET Core Identity是什么?
原文:
用例子看ASP.NET Core Identity是什么?
目录
@ 前言有三个重要的类Claim,ClaimsIdentity,ClaimsPrincipal,我们以一个持有合法证件的学生Bob做比方,ClaimsPrincipal就是持有证件的学生Bob,ClaimsIdentity就是学生Bob的证件驾照,Claim就是Bob驾照中的各种信息。 基于声明的认证(Claims-based Authentication)在开始学习标识管理系统(Identity system)之前,很有必要搞清楚什么是基于声明的身份认证。 Claim
Bob去开户,先提供了一个Identity(这里就是驾照),接着又提供了一个Identity(学生证) 清楚了这些,我们继续看 在ASP.NET Core Identity中是如何实现的ASP.NET Core 是开源的,这能够让我们非常方便的去学习和理解它是如何构成并运行的。源码可以去github上查看。 类ClaimsPrincipal一个用户(User)被声明成ClaimsPrincipal类型(继承自IPrincipal接口)。ClaimsPrincipal类来自System.Security.Claims命名空间。 public class ClaimsPrincipal : IPrincipal { ........... ........... public virtual IIdentity Identity { get; } public virtual IEnumerable<ClaimsIdentity> Identities { get; } public virtual IEnumerable<Claim> Claims { get; } ........... ........... public virtual bool HasClaim(Predicate<Claim> match); public virtual bool HasClaim(string type,string value); public virtual bool IsInRole(string role); ........... ........... } 从ClaimsPrincipal类中可以看到有一个返回类型为ClaimsIdentity集合的Identities属性,代表着一个User可以拥有多个Identity。 考察另外一个重要的类ClaimsIdentitypublic class ClaimsIdentity : IIdentity{ ........... ........... public virtual string AuthenticationType { get; } public virtual string Name { get; } public virtual bool IsAuthenticated { get; } public virtual IEnumerable public virtual IEnumerable public virtual Claim FindFirst(string type); public virtual bool HasClaim(string type,string value); ........... ........... }
现在我们把这个假设的应用场景用图示再总结一下: 在ASP.NET Core Identity中一同运行上述内容在ASP.NET Core Identity 中使用Identity对象的简单交互已经创建了一些API,例如SignInManager,UserManager,RoleManager等,在ASP.NET Core 项目中通过依赖注入就可以使用它们。 public virtual async Task SignInAsync(TUser user,AuthenticationProperties authenticationProperties,string authenticationMethod = null) { var userPrincipal = await CreateUserPrincipalAsync(user); if (authenticationMethod != null) { userPrincipal.Identities.First().AddClaim(new Claim (ClaimTypes.AuthenticationMethod,authenticationMethod)); } await Context.SignInAsync(IdentityConstants.ApplicationScheme,userPrincipal,authenticationProperties ?? new AuthenticationProperties()); } 总结
... var claimsIdentity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name,loginName) },"Basic"); var claimsPrincipal = new ClaimsPrincipal(claimsIdentity); await context.Authentication.SignInAsync(_cookieAuthOptions.AuthenticationScheme,claimsPrincipal); ... 要用Cookie代表一个通过验证的主体,必须包含Claim,ClaimsPrincipal这三个信息,以一个持有合法驾照的人做比方,ClaimsPrincipal就是持有证件的人Bob,ClaimsIdentity就是证件驾照,"Basic"就是证件类型(这里假设是驾照),Claim就是驾照中的信息。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 链接到iPad上的Google Document
- 手动把asp.net的类生成dll文件的方法
- asp.net-mvc – MVC Razor HTML助手语法:Viewba
- asp.net-mvc-3 – MVC 3脚手架可用于n层应用吗?
- asp.net – 在非开发环境中省略从Web API方法返回
- asp.net-mvc – 将组成员身份添加到自定义成员资
- asp.net – .axd文件生成404错误
- asp.net-mvc – 使用部分页面的PagedList.MVC中的
- asp.net-mvc-3 – 如何在mvc3视图中的mvcgrid中多
- asp.net mvc 之旅—— 第二站 窥探Controller下的