我打算在ASP.NET Core上使用IdentityServer 4和ASP.NET Identity作为数据存储。这是我第一次使用中央身份验证/授权,我想知道如何解决以下问题:
假设我的用户拥有名称,角色等声明以及允许这些用户从硬件设备访问测量值的Web API(范围)。 IdentityServer将允许我验证已知用户,但现在我需要一个访问控制,知道哪些用户可以访问哪些设备数据。
我在哪里存储此信息?由于它特定于范围,我猜它不应该存储在IdentityServers存储中。另一方面,如果我将它存储在作用域自己的数据库中,我需要将它连接到IdentityServers存储中定义的用户。我应该定义所有范围和IdentityServer唯一的用户ID吗?
答案 0 :(得分:2)
您需要将IdentiyServer返回的用户ID与范围数据库中定义的用户相关联。
我相信有一个User表和一个UserLogin表,您可以在其中跟踪每个用户的不同登录信息。
然后,在范围数据库中,您可以指定哪些用户可以访问哪些设备数据。
答案 1 :(得分:1)
这是一个坏主意,可能会引导你走上你不应该走的道路。
这意味着请求范围的客户端应用程序需要知道哪个用户甚至可以在从IDP请求令牌之前访问哪些范围(否则您的令牌请求将无效)。而是将这些建模为用户声明。然后在您的WebApi上,您可以进行正常的基于声明的授权。