您应该如何使用 Identity Server 保护多租户 API?

Hug*_*iro 5 identityserver3 identityserver4

我正在努力寻找使用 Identity Server 保护多租户 Web API 的正确方法。让我解释。

我们有一个多租户 Web API,它为 ASP.NET MVC 应用程序提供服务。

  • 每个新客户都分配了一个新的租户 ID。
  • 一个客户可以有多个应用程序订阅。这与说应用程序管理每个客户的多个数据库相同(他可以从相同的基本 URL 访问)。
  • 每个用户都属于一个客户(租户),并且可以访问该客户的所有订阅。

API 的设置方式是每个端点都包含租户 ID 和订阅 ID,因此它可以知道它应该从哪个订阅/数据库获取数据。:

<server>/tentantId/subscriptionId/(...)

现在想象我有另一个外部应用程序(比如控制台应用程序),使用客户端凭据流,它试图“代表”客户访问某些 API 资源,这意味着将使用特定的tenantId/subscriptionId 对:

<server>/1000/1/products

每次调用到达 API 端点之一时,我都需要验证此特定客户端应用程序是否可以访问该租户/订阅。

如果身份服务器可以作为授权流程的一部分自动执行该检查,那将很有意义。

如果我们为客户添加了某种方式来注册(同意)特定客户端应用程序以访问其订阅上的 Web API,那么我们可能还可以将身份服务器设置为以范围的形式知道这一点,或者至少将该信息包含在声明,以便我们可以通过检查令牌而不是调用外部组件来执行权限检查。

这甚至可能吗?我应该尝试使用范围吗?索赔?

任何人都可以指出我正确的方向吗?

m3n*_*ak3 0

IdentityServer 提供身份验证即服务

您的应用程序有责任提供实际的Authorization