我有一个 ASP.NET MVC Web 应用程序,它需要能够为每个用户设置 auth cookie 的域,而不是在整个 Web 应用程序的 web.config 中设置它。
这是我目前设置的:
<httpCookies domain=".mydomain.com" />
方案 1
当用户第一次访问该站点时,他们位于 www.mydomain.com。如果他们登录到我们网站的主要部分,他们将留在 www.mydomain.com,登录将调用:
FormsAuthentication.SetAuthCookie(user.Id + "|"
+ user.EmailAddress + "|"
+ user.Role.ToString()
, true);
...并且 cookie 将被正确设置,因为 www.mydomain.com 与 .mydomain.com 的 cookie 域匹配,一切都很好。
方案 2
用户还可以注册我们网站的自己的部分,即 companyname.mydomain.com。在这种情况下,如果他们从 www.mydomain.com 或 companyname.mydomain.com 登录,cookie 将被正确设置,同样,它与 .mydomain.com 的 cookie 域匹配。
场景 3(问题)
但是,用户可以选择将他们自己的域名指向我们的站点,并让它反映他们在访问 companyname.mydomain.com 时所看到的内容。因此,假设他们注册了域名 companyname.com,将其 A 记录指向我们的服务器,然后在我们的网站上指定他们希望他们的 url 是 companyname.com 而不是 companyname.mydomain.com。他们去 companyname.com,它显示了我们网站中他们部分的登录页面。现在他们尝试登录,当然,它不起作用,因为 companyname.com 与我们的 .mydomain.com cookie 域不匹配。
为什么我们不在 web.config 中完全设置 httpCookies 域?因为如果他们在 www.mydomain.com 上并尝试登录 companyname.mydomain.com,它将失败,因为 cookie 将用于 www.mydomain.com。
我们需要某种方式说,嘿,这个用户的请求来自 mydomain.com 以外的域,将这个用户的 FormsAuthentication cookie 的域设置为他们的域名而不是 .mydomain.com。
有任何想法吗??