【问题标题】:ASP.NET MVC - cross sub domain authentication/membershipASP.NET MVC - 跨子域身份验证/成员资格
【发布时间】:2009-07-25 08:08:25
【问题描述】:

在实现sub domain based language switcher 时遇到了障碍(en.domain.com 加载英语,jp.domain.com 加载日语)。

如何让一个会员系统跨多个子域工作(ASP.NET MVC C#)?

看到了一些关于在 web.config 中将 domain="domain.com" 添加到 <forms > 条目的内容。是这样吗,但是在本地 Visual Studio 开发 Web 服务器上进行测试时是否有效?

【问题讨论】:

标签: c# asp.net-mvc authentication asp.net-membership subdomain


【解决方案1】:

尝试自己创建 cookie。

AccountController 中你会发现:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);

“创建并添加到 cookie 集合”。它不允许修改域(但确实允许修改路径,奇怪的是)。而是创建一个cookie而不添加到集合中,修改必要的属性,然后添加到集合中:

var a = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie);
//if you're debugging right here, a.Domain should be en.example.com; change it
a.Domain = "example.com";
HttpContext.Current.Response.Cookies.Add(a);

詹姆斯

【讨论】:

  • 好主意...虽然我已经决定放弃使用子域来选择语言,但这是一个要记住的。谢谢!
  • 这对我不起作用。我正在使用 EF6 MVC 4...请问您有什么建议吗?
【解决方案2】:

你必须使用点前缀,像这样。

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>

【讨论】:

  • 另外,这仅适用于二级或更高级别的域,即.mydomain 不起作用,但.mydomain.com
  • 它是否适用于“本地主机”?即用于在VS中调试?如果在cookie中设置域,是否还需要在表单标签中设置域?
【解决方案3】:

您的问题是浏览器在请求期间如何发送 cookie。

Cookie 通常绑定到单个域,这是出于安全原因和性能考虑。例如,用户不想将您域的 cookie 发送到任何其他域,因为您的 cookie 可能包含敏感信息。

浏览器会区分使用 en.domain.com 和 jp.domain.com 设置的 cookie。它们不允许来自一个域的 cookie 转到另一个域,因为它们不在父域中。

您的问题的解决方案是接管生成 cookie 的控制权。我对 ASP.NET MVC 的使用并不多,但我确信它可以不是通过 HTML 而是通过属性或其他东西来完成。这是一个非常常见的场景。您应该为您的生产框将 cookie 域设置为“domain.com”,这是正确的。如果您在本地机器上工作,则应将 cookie 域设置为“”。

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 2019-02-25
    • 2013-07-16
    • 2012-02-11
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多