[英]I can Authenticate with my JWT but my Name claim is not recognised in my ASP.NET Core application
[英]Claim base approach in ASP.NET Core
我们想构建一个基于权限的应用程序。 管理员可以设置的位置,例如用户可以执行或不执行的操作。
假设,在Organization-A中,管理员可以将User1
设置为Only CreateTools , EditTools和ViewTools 。 User2
只能执行CreateTools和ViewTools 。
在Organization-B中时,管理员在此处将John
设置为CreateTools和ViewSales (出于某种原因,此处的管理员不允许John
在ViewTools中使用)
如您所见,这些不是用户的角色,而是每个用户的权限。
此外,页面上的链接(锚标签)将根据其权限显示。 假设User1
登录,他只能看到CreateTools , EditTools和ViewTools的链接
我们认为,对于我们来说,至少是一条幸福的道路(否则这会很痛苦吗?请对此发表评论)。 由于我们希望在希望使用我们的应用程序的每个组织中扩展此功能,并仅帮助他们根据自己的喜好设置权限。
我们打算通过Web Api(ASP.NET Core)来构建它,客户端将使用它(浏览器。一个SPA应用程序)
我以前使用ASPNET MVC 5进行的尝试,并使其具有身份标识并从那里构建应用程序。 但是那是基于角色的。
我已经阅读了有关基于索赔的方法,并看到了该博客 (非常有帮助),但是对于我如何使用数据库和标识来实现这一点并不明显。 另请阅读有关JWT的工作原理。
对于我们来说,这是至关重要的部分,但是一旦我们开始了解它的工作原理。 我们将从那里构建应用程序。
任何教程,链接,博客。 评论或建议将非常有帮助。 或我们应该研究的术语。
我个人来看开放源项目IdentityServer
,当前发布的版本是版本3,但是托管在Asp.Net Core中的版本4最近已经达到了候选发布状态。
架构概述
IdentityServer
项目将为您提供Security Token Service
(STS),然后可用于为资源(例如MVC页面,Web API调用,移动应用程序等)提供基于令牌的保护。
Clients
, Scopes
和Claims
定义了可以使用STS进行基于令牌的身份验证的应用程序,他们可以请求的信息类型以及实际的声明(例如用户名,电子邮件地址等); 这些声明由Identity Provider
通过数据库后端存储,该后端与STS本身分开。
STS的任务是提供两种标准的实现,即OpenID Connect
和OAuth2
。
STS将查询Identity Provider
以对用户进行身份验证,并构造一个可以包含与该用户有关的声明的令牌。 这些令牌由每个Client
配置的中间件解码,提取的Claims可以用于与ASP.Net Core Policies结合使用以授权访问,并且该方法将为您提供全面的令牌和基于Claim的安全体系结构。
参考资料,样品和演练
我强烈建议您先阅读IdentityServer3的文档和示例,也许更具体地讲一下IdentityServer4 。这些文档和示例将解释术语,并包含全面的示例和实现的演练。
IdentityServer
合著者Dominick Baier 在这里概述了OpenID Connect
和OAuth2
。
一旦了解了基于令牌的身份验证的工作原理,就应该继续研究如何配置支持您的方案的Identity Provider
。
有多个Identity Provider
项目可用于插入IdentityServer3
,包括ASP.Net Identity。 Brock Allen(也是IdentityServer
共同创始人)创建了Membership Reboot和Identity Reboot项目,用于存储Claims等,以及Identity Manager,Identity Manager提供了用于用户管理的管理门户。 可以在以下链接中找到每个说明:
由Brock Allen介绍Identity Manager
Scott Brady的Identity Manager演练
IdentityServer4
当前支持ASP.Net Core Identity,可以根据需要对其进行自定义以支持多租户。
一套全面的IdentityServer4
快速入门,可以发现在这里 ,具体包括使用ASP.Net Core Identity
和Entity Framework
将数据存储在SQL Server
位置 。
每个快速入门的完整源代码都可以在GitHub上找到 。
授权政策
关于授权,我建议在GitHub上使用AspNetAuthorizationWorkshop来解释基于声明的身份验证和授权的各个方面,特别是包括使用新的ASP.Net核心授权策略,该策略可以通过检查声明的任意组合来指定基于声明的细粒度规则。一组个人用户声称可以查看他们是否满足安全标准-以及可选的传统角色,这些角色也可以用来减少管理开销。
包起来
总之,您可以按照上述建议创建:
基于ASP.Net Core Identity的用户Claims的数据库存储库。
一种安全令牌服务,用于使用IdentityServer认证用户并提供包含声明的令牌。
一组授权策略,用于根据用户声明评估规则(如果选择混合方法,则还包括角色)。
安全是一个复杂的领域,乍一看可能令人生畏。 但是,Dominick Baier和Brock Allen都是公认的行业专家,他们提供了一系列不错的介绍和代码示例,Microsoft建议他们的项目IdentityServer
用于基于声明的身份验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.