Asp.net core IdentityServer 4和特定于作用域的用户设置

Asp.net core IdentityServer 4和特定于作用域的用户设置,asp.net-core,asp.net-core-mvc,identityserver4,Asp.net Core,Asp.net Core Mvc,Identityserver4,我计划在ASP.NET Core上使用IdentityServer 4,并将ASP.NET Identity用作数据存储。这是我第一次使用中央身份验证/授权,我想知道如何解决以下问题: 假设我有一些用户声称自己的名字、角色等,还有一个允许这些用户从硬件设备访问测量值的Web API(范围)。IdentityServer允许我对已知用户进行身份验证,但现在我需要一个访问控制,知道哪些用户可以访问哪些设备数据 我在哪里存储这些信息?由于它是特定于作用域的,我想它不应该存储在IdentityServe

我计划在ASP.NET Core上使用IdentityServer 4,并将ASP.NET Identity用作数据存储。这是我第一次使用中央身份验证/授权,我想知道如何解决以下问题:

假设我有一些用户声称自己的名字、角色等,还有一个允许这些用户从硬件设备访问测量值的Web API(范围)。IdentityServer允许我对已知用户进行身份验证,但现在我需要一个访问控制,知道哪些用户可以访问哪些设备数据


我在哪里存储这些信息?由于它是特定于作用域的,我想它不应该存储在IdentityServer存储中。另一方面,如果我将其存储在scopes自己的数据库中,我需要以某种方式将其连接到IdentityServer存储中定义的用户。我是否应该定义对所有作用域和IdentityServer唯一的用户ID?

您需要将IdentityServer返回的用户ID与作用域数据库中定义的用户关联起来

我相信有一个用户表和一个用户登录表,您可以在其中跟踪每个用户的不同登录


然后,在示波器的数据库中,您可以指定哪些用户可以访问哪些设备数据。

这是一个坏主意,可能会引导您走上一条不应该走的路


这意味着,即使在从IDP请求令牌之前,请求作用域的客户端应用程序也需要知道哪个用户有权访问哪些作用域(否则,令牌请求将不起作用)。而是将其建模为用户声明。然后,您可以在WebApi上执行基于声明的正常授权。

感谢您的回答,并对延迟表示抱歉。我不太明白你所描述的问题。我假设它是这样工作的:用户将浏览器指向登录页面并输入其凭据。登录页面使用IdentityServer对用户进行身份验证,获取令牌并重定向到起始页面。起始页使用WebApi(传递令牌)枚举所有可访问的设备。这个概念有什么问题吗?首先,作用域是定义客户端可能想要访问的资源,而不是用户。“我需要一个知道哪些用户可以访问哪些设备数据的访问控制”(据我所知)转化为基于资源的身份验证问题。您想基于资源(在本例中,资源是设备数据)进行访问控制基于资源的官方文档auth:写了一篇关于它的博客:很棒的博客文章!我得考虑一下。在早期和更简单的实现中,我们使用ASP.NET标识并创建与设备关联的角色(组)。允许属于组的用户查看关联设备的数据。但这很容易,因为用户、角色和设备定义都在数据库中。