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

时间:2016-09-18 15:20:40

标签: authentication asp.net-core authorization claims-based-identity asp.net-core-1.0

我们希望构建基于权限的应用。管理员可以设置的内容,例如用户可以做什么或不做什么。

说,在组织A中,管理员可以将User1设置为仅 CreateTools EditTools ViewTools User2只能执行 CreateTools ViewTools

在Organization-B中,管理员将John设置为 CreateTools ViewSales (出于某种原因,管理员不允许{{} 1}}到ViewTools)

正如您所注意到的,这些不是用户的角色,而是每个用户的权限。

此外,页面上的链接(锚标记)将根据其权限显示。说,John登录,他只能看到 CreateTools EditTools ViewTools

的链接

我们认为,对我们来说,至少是幸福的道路(或者这会是痛苦的吗?请对此发表评论)。因为我们想在每个想要使用我们的应用程序的组织上扩展它,并且只是帮助他们根据自己的喜好设置权限。

我们打算构建它的方式是通过Web Api(ASP.NET Core),它将被客户端使用(浏览器.SPA应用程序)

我之前尝试过的,使用ASPNET MVC 5并使用身份构建脚手架并从那里构建应用程序。但那是基于角色的东西。

我已经阅读了基于声明的方法并看到了这个blog(非常有帮助),但对于我如何使用数据库和身份来实现它并不明显。另请阅读JWT的工作原理。

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

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

1 个答案:

答案 0 :(得分:3)

就个人而言,我会看一下开源项目IdentityServer,当前发布的版本是版本3,但是在Asp.Net Core中托管的版本4最近已经获得了候选版本状态。

架构概述

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

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

STS的任务是提供两个标准OpenID ConnectOAuth2的实施。

Overview presented at http://docs.identityserver.io/en/dev/intro/terminology.html

STS将查询Identity Provider以验证用户身份,并构造可包含与该用户相关的声明的令牌。这些令牌由每个Client中配置的中间件解码,提取的声明可用于授权访问,可选地与ASP.Net Core Policies一起使用,这种方法将为您提供全面的令牌和基于声明的安全架构。

参考资料,样本和演练

我强烈建议您首先检查IdentityServer3的文档和示例,或者更具体地说IdentityServer4。这些解释了术语,并包含了实施的全面示例和演练。

IdentityServer的共同作者Dominick Baier概述了OpenID ConnectOAuth2 here

了解基于令牌的身份验证的工作原理后,您应该继续检查如何配置支持您的方案的Identity Provider

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

Identity Reboot by Brock Allen

Introducing Identity Manager by Brock Allen

Identity Manager walkthrough by Scott Brady

IdentityServer4目前支持ASP.Net核心身份,如果需要,可以自定义以支持多租户。

可以找到一组全面的IdentityServer4快速入门here,具体包括使用ASP.Net Core IdentityEntity FrameworkSQL Server {{3}中存储数据}}

GitHub here上提供了每个快速入门的完整源代码。

授权政策

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

结束

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

  1. 基于ASP.Net核心身份的用户声明的数据库存储库。

  2. 用于验证用户和提供的安全令牌服务 包含声明的令牌,使用IdentityServer。

  3. 一组授权策略,用于评估针对用户的规则 声明(如果您选择混合方法,还可以使用角色)。

  4. 安全是一个复杂的领域,起初看起来非常艰巨。但是,Dominick Baier和Brock Allen都是公认的行业专家,他们提供了一系列良好的介绍和代码示例,Microsoft推荐他们的项目IdentityServer用于基于声明的身份验证。