【问题标题】:ASP.NET Session and Cookies in Multi-tenant application多租户应用程序中的 ASP.NET 会话和 Cookie
【发布时间】:2012-02-16 02:10:54
【问题描述】:

我正在开发一个多租户 ASP.NET MVC 应用程序。

到目前为止,我们一直在使用 HttpContext 来存储请求的一些对象(技术上按租户划分)。

但是,我们将需要使用 TempData(使用 Session)并设置身份验证 cookie。

我们的规格:

  • 一个租户可以有多个 url(tenant1.myapp.com 或 mycustomdomain.com)
  • 租户不应共享身份验证 cookie
  • 理想情况下,租户的身份验证 cookie 应该由他们的任何一个 url 共享

会话域感知吗?好像是。

我可以在一个身份验证 cookie 上设置多个域吗?

我们将不胜感激任何其他可能引起我注意的建议。真的,我只需要了解每个租户需要分区的内容(到目前为止,我已经对每个租户的文件系统、数据库和缓存进行了分区)。

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc multi-tenant


    【解决方案1】:

    会话域感知吗?

    默认情况下,会话由 cookie 跟踪,因为 cookie 被限制在同一个域中,所以会话不仅可以感知域,还可以感知应用程序,这意味着如果您在同一域中有两个应用程序,它们将不会共享会话。

    我可以在一个身份验证 cookie 上设置多个域吗?

    没有。 Cookie 不能在域之间共享。但与会话相反,您可以在同一域上的多个应用程序之间共享它们(通过将domain 属性设置为 web.config 中 <forms> 标记中的顶级域)。这就是允许在同一域上的应用程序之间实现单点登录的原因。如果您想在不同域的应用程序之间实现单点登录,您需要different approach

    【讨论】:

    • 感谢您的澄清。因此,默认情况下这似乎是安全的。无论如何,我的租户可能只有一个网址。
    【解决方案2】:

    您可能想查看Session Partitioning

    <configuration>
        <system.web>
            <sessionState 
                mode="StateServer" 
                partitionResolverType=
                    "IndustryStrengthSessionState.PartitionResolver" />
        </system.web>
    </configuration> 
    

    但我不相信您可以开箱即用地跨域共享会话。您可能需要添加自定义会话同步,其中每个域会话通过自定义算法链接到相同的用户/租户等。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2014-02-10
      • 2011-08-31
      相关资源
      最近更新 更多