【问题标题】:Programmatically set cookie domain per user in ASP.NET MVC在 ASP.NET MVC 中以编程方式为每个用户设置 cookie 域
【发布时间】:2012-09-21 04:42:21
【问题描述】:

我有一个 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。

有什么想法吗??

【问题讨论】:

    标签: asp.net asp.net-mvc cookies


    【解决方案1】:

    我意识到这种方法行不通,因为出于安全考虑,您无法为您不在的域设置 cookie。

    相反,我现在要做的是尝试登录,然后检查我们必须重定向到的域是否是我们当前所在的域。如果是这样,那么我们设置身份验证票并重定向到安全部分。如果我们不在要重定向到的域上,我们会从 currentdomain.com/validatelogin 重定向到 newdomain.com/validatelogin,然后将运行相同的检查,是的,我们在我们所在的域上重定向到,所以设置 auth cookie 然后我们就走了。

    【讨论】:

      【解决方案2】:

      使用GetAuthCookie,您可以手动检索身份验证cookie并设置域名:

      HttpCookie authcookie = FormsAuthentication.GetAuthCookie(userName, False);
      authcookie.Domain = "companyname.mydomain.com";
      HttpResponse.AppendCookie(authcookie);
      

      【讨论】:

      • 它不起作用。我尝试进入一个域然后登录,将登录 cookie 设置到另一个域,然后重定向到另一个域,它不会将用户标记为已登录。
      • 这是不可能的,你只能为你当前所在的域设置一个cookie。如果您想为多个域使用 1 个登录系统,则必须使用单点登录 (SSO) 之类的东西。
      猜你喜欢
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多