Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication ASP.NET内核中的基于声明的方法_Authentication_Asp.net Core_Authorization_Claims Based Identity_Asp.net Core 1.0 - Fatal编程技术网

Authentication ASP.NET内核中的基于声明的方法

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查看工具) 正如您所注意到的,这些不是用户的角色,而是每个用户的权限 此外,页面上的链接(锚定

我们想建立一个基于权限的应用程序。管理员可以设置一些事情,例如用户可以做什么或不可以做什么

比如说,在Organization-A中,管理员可以将
User1
设置为仅CreateToolsEditToolsViewTools<代码>用户2只能执行创建工具查看工具

在Organization-B中,此处的管理员将
John
设置为CreateToolsViewSales(出于某种原因,此处的管理员不允许
John
查看工具)

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

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

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

我们打算通过一个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

  • 针对用户评估规则的一组授权策略 声明(如果您选择混合方法,还包括角色)

  • 安全是一个复杂的领域,一开始可能会让人望而生畏。