ASP.NET MVC - 跨子域身份验证/成员身份

发布于 2024-07-29 01:14:09 字数 400 浏览 2 评论 0原文

在实现基于子域的语言切换器时遇到障碍< /a>(en.domain.com 加载英语,jp.domain.com 加载日语)。

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

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

Hit a roadblock while implementing a sub domain based language switcher (en.domain.com loads English, jp.domain.com loads Japanese).

How do I get a single membership system to work across multiple sub domains (ASP.NET MVC C#)?

Saw something about adding domain="domain.com" to <forms > entry in web.config. Did that, but does that work when testing on local visual studio development web server?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

落在眉间の轻吻 2024-08-05 01:14:09

尝试自己创建 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);

James

Try creating the cookie yourself.

In AccountController you'll find this:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);

that "creates and adds to the cookie collection". It doesn't allow modification of the domain (but does allow modification of the path, oddly). Instead create a cookie without adding to the collection, modify the necessary properties, then add to the collection:

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

James

水溶 2024-08-05 01:14:09

您必须使用点前缀,如下所示。

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

You have to use dot prefix, like this.

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
绮烟 2024-08-05 01:14:09

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

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

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

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

Your problem is how browsers sends cookie during request.

Cookie is generally tied to a single domain, this is for security reasons and performance. For example, user don't want to send cookie for your domain to any other domain, because your cookie may contain sensitive information.

Browser do differentiate between cookies set with en.domain.com and jp.domain.com. They do not allow cookies from one domain goes to the other because they are not on a parent domain.

The solution to your problem would be to take over the control of generating cookies. I haven't played much with ASP.NET MVC, but I'm sure it can be done not through the HTML but through a property or something. This is a very common scenario. You should set the cookies domain to "domain.com" for your production boxes, that is correct. If you're working on a local box, you should set the cookies domain to "".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文