验证多租户应用程序中的所有子域

Authenticate all Subdomains in Multitenant Application

我构建了一个多租户 SAAS 应用程序。在此应用程序中,用户可以在注册期间选择他喜欢的子域名。当用户登录到主应用程序时,即 app.example.com,我验证他的凭据,然后将他重定向到他的首选域,即 client1.example.com

我正在使用表单身份验证并尝试通过在 web.config 中进行以下更改来对域 "example.com" 上的用户进行身份验证。

<forms loginUrl="~/Login/Home/AuthenticateLogin" timeout="2880" protection="All" domain=".domain.com"/>

我的理解是,一旦通过 "example.com" 的身份验证,用户将能够访问 (domain.com) 的任何子域。但似乎这并没有按预期发生。成功登录 app.example.com 后,当我将他重定向到 client1.example.com 时,它再次显示登录页面。

我在这里错过了什么?

您需要为共享身份验证 cookie 的所有应用程序配置相同的 machineKey。参见 Generate a Machine Key for a Web Farm (IIS 7)

还要验证在您登录时是否设置了 cookie,并且它会流向所有应用程序。

好的,所以在尝试了这么久之后我才知道真正的问题是什么。

实际上,即使在允许子域共享身份验证 cookie 之后它也不起作用,因为 SessionId 没有在子域之间共享。我的应用程序有 outproc 会话配置(Sql 服务器)。要在子域之间共享 SessionId,我必须在 web.config 中输入以下内容:

<httpCookies domain=".domain.com"/>

在此之后,它就像一个魅力。

希望这对有需要的人有所帮助。