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

时间:2015-07-24 14:07:29

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

我已经构建了一个多租户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时,它再次显示登录页面。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

好的,所以经过这么久的努力,我才知道真正的问题是什么。

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

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

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

希望这可以帮助有需要的人。

相关问题