IdentityServer4:数据库中不同表中的不同用户类型

问题描述 投票:0回答:1

目前的情况:我有一个包含3个WebAPI项目的应用程序(比如API A,B,C)。每个都有基于令牌的身份验证(基于OAuthAuthorizationServerProvider)。有3种用户类型(比方说类型1,2,3)。每个用户类型都存储在单独的数据库表中;

  • 移动客户端使用的“API A”(“类型1”用户)
  • “API B”部分由移动客户端(“类型1”用户)使用,部分由Web客户端使用(角度应用程序,“类型2”用户)
  • Web客户端使用的“API C”(“Type 3”用户)

也,

  • “类型1”用户可以从“API A”获取令牌并将其从“API B”交换到另一个令牌,以便访问“API B”资源(“类型1”用户使用的“API B”中的某些控制器,其他 - 由“Type 2”用户)
  • “类型2”用户具有两步授权 他们使用登录名和密码来获取对单个控制器具有“限制访问权限”的令牌,以便从中选择一些值 使用先前的令牌和选择的值,他们将其交换为“完全访问”令牌

我打算从当前的授权方案迁移到IdentityServer4。所以,我有几个问题:

主要问题:

  1. 如何使用单个IdentityServer4实例通过单个端点(服务器/连接/令牌)验证3个不同数据库表中的3种不同用户类型?

其他问题:

  1. 如何为“Type 2”用户实施两步授权?
  2. 你能在我的情况下提出什么建议?

谢谢!

c# oauth-2.0 identityserver4
1个回答
2
投票

对于IdentityServer,只有一种类型的用户需要进行身份验证。因此,应将所有用户移动到同一个表(如何迁移是另一个问题)。如果将用户移动到一个表是一个问题,那么IdentityServer可能不是实现安全性的正确工具。虽然可以通过实现自定义用户存储来维护单独的表。可以为每个用户启用双因素身份验证。您可以使用扩展授权来实现自定义授权。

安全的全部目的是保护您的资源:api。在IdentityServer中,资源名称是可以在多个范围中拆分的功能的逻辑名称,其中范围是特定功能。

Api1可以是具有多个范围的资源(例如Api1.ReadApi1.Write)或仅仅是Api1。但Api1Api2Api3也可以成为Api资源的一部分,其中Api1Api2Api3实际上是范围。在你的情况下,Api1可能是Api1作为范围的资源。

为了使用户能够访问您需要客户端应用程序的资源,尽管您可以拥有许多可以访问相同资源的客户端。为了支持不同类型的客户端,可以从中选择多种授权类型。


IdentityServer允许您配置完整的图片。

假设有一个客户端可以访问不同的Api,其中每个Api是一个资源/范围。

需要允许客户端代表用户访问Api,因为客户端无法在没有用户的情况下访问资源。

因此,应允许客户端使用某些范围,其中范围需要由客户端请求。没有这个,客户端就无法访问资源。假设客户端配置为Api1Api2,但客户端仅请求Api1。然后Api2Api3无法到达。

这是顶级授权的一部分。现在是时候让用户参与进来了。当客户端访问api时,api知道哪个用户发出了请求(因为sub是访问令牌的一部分)。但这还不足以授予或拒绝访问权限。

所以你需要一些东西来授权用户。关于如何实现这一点有很多选择。看看documentation

考虑一个简单的实现,其中有三个策略。每个策略都确保只有匹配类型的用户才能访问。

那么实际的问题是,如何区分用户的类型?


您可以在UserClaims表中添加声明。假设ClaimType是UserType,值是1。在资源中添加一个策略,用于检查声明UserType和所需的值。

为了让IdentityServer将声明添加到访问令牌,请确保claimType是作用域的一部分(或者在配置多个作用域且需要claimType时为ApiResource)。

通过将claimType UserType添加到Api_范围,意味着在访问范围时,必须包含声明。 IdentityServer尝试通过仅对请求的声明进行过滤来限制访问令牌中的声明数。

当用户访问Api_时,声明应该是访问令牌的一部分(假设为每个用户设置了声明,否则用户根本没有访问权限)。您可以为其他api(范围)重复此设置。

在这种情况下,我认为这是一个可以接受的解决方案。其他选择是较低级别(基于资源)或外包的授权,如PolicyServer

请注意,由于SSO,用户可能也会被其他客户端验证。但由于访问权限仅授予某些类型的用户(作为策略的一部分),因此您可以阻止其他类型的用户访问不适合他们的资源。您可以通过禁用自动登录来防止此行为。

© www.soinside.com 2019 - 2024. All rights reserved.