我已经构建了一个多租户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时,它再次显示登录页面。
我在这里缺少什么?
答案 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"/>
在此之后,它就像一个魅力。
希望这可以帮助有需要的人。