验证多租户应用程序中的所有子域
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"/>
在此之后,它就像一个魅力。
希望这对有需要的人有所帮助。
我构建了一个多租户 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"/>
在此之后,它就像一个魅力。
希望这对有需要的人有所帮助。