繁体   English   中英

ASP.NET Core中基于声明的方法

[英]Claim base approach in ASP.NET Core

我们想构建一个基于权限的应用程序。 管理员可以设置的位置,例如用户可以执行或不执行的操作。

假设,在Organization-A中,管理员可以将User1设置为Only CreateToolsEditToolsViewTools User2只能执行CreateToolsViewTools

在Organization-B中时,管理员在此处将John设置为CreateToolsViewSales (出于某种原因,此处的管理员不允许John在ViewTools中使用)

如您所见,这些不是用户的角色,而是每个用户的权限。

此外,页面上的链接(锚标签)将根据其权限显示。 假设User1登录,他只能看到CreateToolsEditToolsViewTools的链接

我们认为,对于我们来说,至少是一条幸福的道路(否则这会很痛苦吗?请对此发表评论)。 由于我们希望在希望使用我们的应用程序的每个组织中扩展此功能,并仅帮助他们根据自己的喜好设置权限。

我们打算通过Web Api(ASP.NET Core)来构建它,客户端将使用它(浏览器。一个SPA应用程序)

我以前使用ASPNET MVC 5进行的尝试,并使其具有身份标识并从那里构建应用程序。 但是那是基于角色的。

我已经阅读了有关基于索赔的方法,并看到了该博客 (非常有帮助),但是对于我如何使用数据库和标识来实现这一点并不明显。 另请阅读有关JWT的工作原理。

对于我们来说,这是至关重要的部分,但是一旦我们开始了解它的工作原理。 我们将从那里构建应用程序。

任何教程,链接,博客。 评论或建议将非常有帮助。 或我们应该研究的术语。

我个人来看开放源项目IdentityServer ,当前发布的版本是版本3,但是托管在Asp.Net Core中的版本4最近已经达到了候选发布状态。

架构概述

IdentityServer项目将为您提供Security Token Service (STS),然后可用于为资源(例如MVC页面,Web API调用,移动应用程序等)提供基于令牌的保护。

ClientsScopesClaims定义了可以使用STS进行基于令牌的身份验证的应用程序,他们可以请求的信息类型以及实际的声明(例如用户名,电子邮件地址等); 这些声明由Identity Provider通过数据库后端存储,该后端与STS本身分开。

STS的任务是提供两种标准的实现,即OpenID ConnectOAuth2

概述位于http://docs.identityserver.io/en/dev/intro/terminology.html

STS将查询Identity Provider以对用户进行身份验证,并构造一个可以包含与该用户有关的声明的令牌。 这些令牌由每个Client配置的中间件解码,提取的Claims可以用于与ASP.Net Core Policies结合使用以授权访问,并且该方法将为您提供全面的令牌和基于Claim的安全体系结构。

参考资料,样品和演练

我强烈建议您先阅读IdentityServer3的文档和示例,也许更具体地讲一下IdentityServer4 。这些文档和示例将解释术语,并包含全面的示例和实现的演练。

IdentityServer合著者Dominick Baier 在这里概述了OpenID ConnectOAuth2

一旦了解了基于令牌的身份验证的工作原理,就应该继续研究如何配置支持您的方案的Identity Provider

有多个Identity Provider项目可用于插入IdentityServer3 ,包括ASP.Net Identity。 Brock Allen(也是IdentityServer共同创始人)创建了Membership Reboot和Identity Reboot项目,用于存储Claims等,以及Identity Manager,Identity Manager提供了用于用户管理的管理门户。 可以在以下链接中找到每个说明:

Brock Allen重新启动身份

由Brock Allen介绍Identity Manager

Scott Brady的Identity Manager演练

IdentityServer4当前支持ASP.Net Core Identity,可以根据需要对其进行自定义以支持多租户。

一套全面的IdentityServer4快速入门,可以发现在这里 ,具体包括使用ASP.Net Core IdentityEntity Framework将数据存储在SQL Server 位置

每个快速入门的完整源代码都可以在GitHub上找到

授权政策

关于授权,我建议在GitHub上使用AspNetAuthorizationWorkshop来解释基于声明的身份验证和授权的各个方面,特别是包括使用新的ASP.Net核心授权策略,该策略可以通过检查声明的任意组合来指定基于声明的细粒度规则。一组个人用户声称可以查看他们是否满足安全标准-以及可选的传统角色,这些角色也可以用来减少管理开销。

包起来

总之,您可以按照上述建议创建:

  1. 基于ASP.Net Core Identity的用户Claims的数据库存储库。

  2. 一种安全令牌服务,用于使用IdentityServer认证用户并提供包含声明的令牌。

  3. 一组授权策略,用于根据用户声明评估规则(如果选择混合方法,则还包括角色)。

安全是一个复杂的领域,乍一看可能令人生畏。 但是,Dominick Baier和Brock Allen都是公认的行业专家,他们提供了一系列不错的介绍和代码示例,Microsoft建议他们的项目IdentityServer用于基于声明的身份验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM