Authentication ASP.NET内核中的基于声明的方法
我们想建立一个基于权限的应用程序。管理员可以设置一些事情,例如用户可以做什么或不可以做什么 比如说,在Organization-A中,管理员可以将Authentication ASP.NET内核中的基于声明的方法,authentication,asp.net-core,authorization,claims-based-identity,asp.net-core-1.0,Authentication,Asp.net Core,Authorization,Claims Based Identity,Asp.net Core 1.0,我们想建立一个基于权限的应用程序。管理员可以设置一些事情,例如用户可以做什么或不可以做什么 比如说,在Organization-A中,管理员可以将User1设置为仅CreateTools、EditTools和ViewTools用户2只能执行创建工具和查看工具 在Organization-B中,此处的管理员将John设置为CreateTools,ViewSales(出于某种原因,此处的管理员不允许John查看工具) 正如您所注意到的,这些不是用户的角色,而是每个用户的权限 此外,页面上的链接(锚定
User1
设置为仅CreateTools、EditTools和ViewTools<代码>用户2只能执行创建工具和查看工具
在Organization-B中,此处的管理员将John
设置为CreateTools,ViewSales(出于某种原因,此处的管理员不允许John
查看工具)
正如您所注意到的,这些不是用户的角色,而是每个用户的权限
此外,页面上的链接(锚定标签)将根据其权限显示。比如说,User1
登录,他只能看到CreateTools、EditTools和ViewTools的链接
我们认为,对我们来说,至少是一条快乐的道路(或者这会是痛苦的吗?请对此发表评论)。因为我们想在每个希望使用我们的应用程序的组织上扩展此功能,并帮助他们根据自己的喜好设置权限
我们打算通过一个Web Api(ASP.NET核心)来构建它,该Api将由客户端(浏览器。SPA应用程序)使用
我以前尝试过的,使用ASPNET MVC 5,让它与identity一起搭建脚手架,然后从那里构建应用程序。但这就是角色基础
我读过claim base方法,看到了这一点(非常有用),但对于我来说,如何使用数据库和标识实现这一点并不明显。还可以阅读JWT的工作原理
对我们来说,这是至关重要的一部分,但一旦我们开始了解它是如何工作的。我们将从那里构建应用程序
任何教程、链接、博客。评论或建议将非常有用。或者我们应该研究的术语。我个人会看看开源项目
IdentityServer
,当前发布的版本是版本3,但Asp.Net Core中托管的版本4最近已达到发行候选状态
体系结构概述
IdentityServer
项目将为您提供安全令牌服务
(STS),然后可以使用该服务为资源(如MVC页面、Web API调用、移动应用程序等)提供基于令牌的保护
客户端
、范围
和声明
定义可以使用STS进行基于令牌的身份验证的应用程序、它们可以请求的信息类型以及实际声明(例如用户名、电子邮件地址等);这些声明由一个身份提供程序和一个独立于STS本身的数据库后端存储
STS的任务是提供两种标准的实现,OpenID Connect
和OAuth2
STS将查询身份提供者
,以便对用户进行身份验证,并构造可包含与该用户相关的声明的令牌。这些令牌由在每个客户机中配置的中间件解码,提取的声明可用于授权访问,可选地与此方法结合使用,并且此方法将为您提供一个全面的基于令牌和声明的安全体系结构
参考资料、样本和演练
我强烈建议您首先检查文档和示例,也许更具体地说,它们解释了术语,并包含全面的示例和实施演练
Dominick Baier是IdentityServer
的合著者,他概述了OpenID Connect
和OAuth2
一旦您了解了基于令牌的身份验证是如何工作的,就应该继续研究如何配置支持您的场景的身份提供程序
有多个Identity Provider
项目可插入Identity Server 3
,包括ASP.Net Identity。Brock Allen(也是IdentityServer
的联合创始人)创建了会员资格重新启动和身份重新启动项目,用于存储声明等,以及Identity Manager,它为用户管理提供了一个管理门户。有关每种方法的说明,请参见以下链接:
IdentityServer4
目前支持ASP.Net核心标识,如果需要,可以自定义该标识以支持多租户
可以找到一套全面的IdentityServer4
quickstart,具体包括使用ASP.Net核心标识
和实体框架
在SQL Server
中存储数据
GitHub上提供了每个QuickStart的完整源代码
授权策略
关于授权,我建议在GitHub上解释基于声明的身份验证和授权的各个方面,具体包括使用新的ASP.Net核心授权策略,这些策略可以指定基于声明的细粒度规则,通过检查单个用户声明集合的任意组合,查看它们是否满足安全标准,以及(可选)传统角色,这些角色也可以用于减少管理开销
收尾
总之,您可以按照上述建议创建:
基于ASP.Net核心标识的用户声明数据库存储库
一种安全令牌服务,用于认证用户,并提供
包含声明的令牌,使用IdentityServer
针对用户评估规则的一组授权策略
声明(如果您选择混合方法,还包括角色)
安全是一个复杂的领域,一开始可能会让人望而生畏。