ASP.NET MVC - 跨子域认证/会员(ASP.NET MVC - cross sub do

2019-07-30 19:04发布

打了一个路障,同时实现子域为基础的语言切换器 (en.domain.com负载英语,jp.domain.com负载日语)。

我如何获得一个会员制在多个子域(ASP.NET MVC C#)工作?

看到了有关增加一些domain="domain.com"<forms > web.config中的条目。 这样做,但当地的Visual Studio开发Web服务器上进行测试时的工作?

Answer 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);

詹姆士



Answer 2:

你必须使用点字头,像这样。

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


Answer 3:

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

饼干一般依赖于一个单一的领域,这是出于安全原因和性能。 例如,用户不希望发送的cookie为您的域名到任何其他域,因为您的Cookie可能包含敏感信息。

浏览器确实与en.domain.com和jp.domain.com设置cookies区分。 他们不会允许Cookie从一个域转到另一个,因为他们不是在一个父域。

你的问题的解决方案是接手产生的cookies的控制。 我没打过多少与ASP.NET MVC,但我敢肯定,它无法通过HTML,但通过属性或东西来完成。 这是一个很常见的场景。 你应该设置的Cookie域“domain.com”为您的生产箱,这是正确的。 如果你在一个地方工作的盒子,你应该设置的Cookie域“”。



文章来源: ASP.NET MVC - cross sub domain authentication/membership