【问题标题】:Share session across subdomains with multiple domains与多个域的子域共享会话
【发布时间】:2019-07-26 16:29:33
【问题描述】:

我有 2 个 Asp.Net Core 2.2 应用程序,我想在它们之间共享会话。 我已经在 SQL 数据库中设置了会话,并且都连接正常。 它们位于不同的子域上。 我知道我可以将 Cookie.Domain 设置为启动文件,这将在基本层面解决问题,因此每个应用程序都会创建 cookie 以便可以访问它。 例如

Domain 1. "www.website.com"
Domain 2. "dashboard.website.com"

目前这些站点无法访问彼此的会话 cookie。

如果我将域 cookie 设置为“.website.com”,那么两者都应该能够访问它。

问题是我们有多个域使用这个网站,所以它可能是:

www.domain1.com
dashboard.domain1.com

www.domain2.com
dashboard.domain2.com

www.domain3.com
dashboard.domain3.com

我需要能够将当前主机名注入启动 cookie 域,以便根据活动网站的域动态设置它。

这可能吗?

提前致谢, 大卫

【问题讨论】:

    标签: session asp.net-core sql-session-state


    【解决方案1】:

    不,这是不可能的。 Cookie 是域绑定的。您可以为 cookie 上的子域部分设置通配符,这将允许 example.comwww.example.comfoo.example.com 等看到它,但您不能与完全不同的域共享,例如example2.com.

    在这种情况下,您唯一的选择是身份提供商,如 IdentityServer、Auth0、Azure AD 等。这些工作的方式是在提供商处设置身份验证 cookie,然后针对该提供商授权每个单独的应用程序。因此,他们可以从提供者那里接收用户主体,而无需实际的身份验证 cookie 或他们自己的登录功能。

    更新

    如果您只需要在同一主域上的站点之间共享,请关注instructions in the docs。这集中在 auth cookie 上。如果您还需要共享会话,则适用相同的过程,但您还必须拥有一个真正的distributed cache setup(Redis、SQL Server 等)。有一个分布式内存缓存,但这只是一个默认实现,实际上并不是分布式的。

    【讨论】:

    • 感谢您的回复。也许我并不完全清楚。我不希望所有域都能看到对方。我想让 www.domain1.com 看到dashboard.domain1.com。我想让 www.domain2.com 看到dashboard.domain2.com。我不需要 www.domain1.com 来查看dashboard.domain2.com
    • 我需要能够将运行域注入到 cookie 的设置中。
    • 谢谢克里斯。我遇到的问题是如何支持我们拥有的不同变体。即我们需要有不同的 cookie 域,但每个只需要能够访问它自己的域。出于这个原因,我不能只添加“.domain1.com”,因为我需要能够支持“.domain2.com”。我不需要 domain1 和 domain 2 来共享会话,我确实需要 www.domain1.com 与 dashboard.domain1.com 共享,也需要 www.domain2.com 与 dashboard.domain2.com 共享会话。谢谢
    猜你喜欢
    • 2018-06-08
    • 2011-02-19
    • 1970-01-01
    • 2021-12-26
    • 2016-08-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多