【问题标题】:OIDC, multi-tenant SPA and wildcard callbackOIDC、多租户 SPA 和通配符回调
【发布时间】:2021-09-08 23:57:27
【问题描述】:

我目前有一个多租户 SPA 应用程序,它使用通配符 URL 来区分租户和数据库。例如https://tenant1.appname.com 可能与数据库tenant1_db 相关联,https://tenant2.appname.com 将与数据库tenant2_db 相关联。

目前,前端 SPA 与后端 .Net API 托管在同一台服务器上。我将 cookie 身份验证与仅 HTTP cookie 一起使用,因为所有内容都托管在同一个站点上——我不必处理 CORS 或类似的东西。

我正在探索使用 OIDC 从 Azure AD 进行身份验证的可能性。我的理解是 RFC 规范声明必须对绝对 URI 进行 OIDC 回调。所以,我无法回调 https://tenant1.appname.com 之类的东西。

我读过一些关于使用状态来跟踪租户并在 OIDC 登录后重定向的地方。我只是好奇这在 cookie 和跟踪令牌方面是如何工作的。如果回调 URL 为 https://appname.com/callback,然后 SPA 客户端转发到 https://tenant1.appname.com,则由于域不同,我的 cookie/令牌现在似乎无效或无法访问。

有人能解释一下这是如何工作的吗?

【问题讨论】:

    标签: javascript single-page-application openid-connect


    【解决方案1】:

    有趣的问题,我想我会根据经验发布一些详细信息。不过,这可能不是一个完整的答案。

    设计思路

    根据我为投资银行提供的系统,我将从最简单的选项如何工作开始:

    • 来自所有租户的所有用户共享相同的数据库、API 和应用程序 URL
    • 租户 ID 声明包含在令牌中
    • API 确保租户 A 的用户永远无法看到租户 B 的数据

    对此不满意的客户可以支付额外费用来获得自己的专用服务器和 URL - 正如您所描述的那样。如果 cookie 用于租户 A,则它们不得用于租户 B 域。

    这样做的一个主要好处是您可以保持代码简单 - 一切都是标准的,包括您提到的回调 URL 问题。对于不同的租户,您可以使用不同的配置设置部署相同的代码。

    天蓝色广告

    这可以选择为每个租户使用不同的 OAuth URL,并且还可以将租户 ID 作为声明包含在令牌中。不过,这可能不是您想要的,因为并非所有租户都相同:

    • 90% 的租户可能乐于共享同一个系统 - 这将是所有小客户
    • 10% 的客户可能愿意支付额外费用 - 这将是大客户

    技术解决方案

    希望大家普遍认为,这个问题通常没有神奇的技术解决方案。跨租户共享 cookie 或执行非标准 OAuth 操作可能会导致漏洞。

    路由解决方案

    另一个需要考虑的选项是动态用户路由。您可以识别同一系统中的所有用户,然后将他们动态路由到正确的 URL。

    大多数系统不支持这一点,但如果它给你一些想法,请查看recent article from Curity - 特别是反向代理提供的可能性。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 2022-10-24
      • 2021-03-06
      • 1970-01-01
      • 2021-01-27
      • 2013-04-23
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      相关资源
      最近更新 更多