【问题标题】:How to make OpenIdConnect multi-tenant?如何使 OpenIdConnect 多租户?
【发布时间】:2021-09-04 19:20:55
【问题描述】:

我有一个使用 OpenIdConnect 进行授权的应用。一切正常。我添加了 Finbuckle.Multitenant 以使应用程序成为多租户,并设置了我的自定义 TenantInfo

我需要的一个功能是每个租户可以连接到不同的授权服务器。

在没有多租户的情况下,我在Startup.cs 中进行了以下设置:

.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Authority = Configuration["Authority"];
    options.ClientId = Configuration["ClientId"];
    options.ClientSecret = Configuration["ClientSecret"];
    //etc...
}

这原本运作良好。但是,我怎样才能让每个租户移动 Authority,然后在收到请求时连接到该权限?

注意: 我没有使用 Azure 作为我的 IdP。

【问题讨论】:

  • 使用多租户和每个租户设置一个身份提供者,我的猜测是您只需为每个权限重复调用 AddOpenIdConnect 或拥有一个将 ValidIssuers 设置为的身份提供者所有单独的当局。

标签: c# asp.net-core openid-connect


【解决方案1】:

我会推荐以下设置,它使软件简单且可靠:

  • 每个正在运行的 API 或 Web 后端都与单个授权服务器 (AS) 有关系,并且这必须由构建软件的同一方(您的公司)拥有 - 这意味着您的代码应该只依赖于单一权限

  • 当用户登录时,AS 可以为每个合作伙伴管理不同的身份验证方法 - 如我的 blog post 中所述 - 如果您的要求只是不同的身份验证器

多租户数据可以这样管理:

  • 所有客户都使用您软件的相同运行实例,并且当用户进行身份验证时,您添加租户 ID 声明以访问令牌,该令牌可在 API 授权期间使用,以确保来自合作伙伴 A 的用户永远无法访问合作伙伴 B 数据

  • 过去,我曾为大型银行提供软件,但这些软件对我来说还不够好,在这种情况下,我们为该银行提供了额外的实例和自定义 URL。这提供了额外的数据隔离保证,以防代码出错 - 对于专用实例,只需要更改配置设置,核心逻辑保持不变 - 我的公司转嫁了此级别服务的成本。

另请注意,上述所有设计在技术上都很简单,并且随着软件的发展将保持简单。

最后,一些 AS 提供商,比如我工作的 Curity,支持multi tenant instances,如果以上都不适合你,这可能会给你更多的设计思路。

【讨论】:

    猜你喜欢
    • 2014-10-14
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多