带子域的Asp.Net Forms身份验证

时间:2016-02-04 05:44:16

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

我正在使用mvc 5运行一个asp.net 4.5.2应用程序。我有自定义例程来处理应用程序的每个区域的子域。

我在其中一个区域(个人资料)中拥有我的用户身份验证,这是它自己的子域名。在导航栏中,有一个登录表单,POST表示Profile控制器的Login()操作。由于这是一个子域名,因此我手动设置auth的域信息,以使其适用于所有子域。

对于我的生活,我无法弄清楚如何让它发挥作用。我已经尝试将Form Auth域设置为TLD,TLD带有。在前面,使用webconfig中的表单信息,没有。

以下是有关表格auth的重要内容:

的Web.Config

<system.web>
  <authentication mode="Forms">
  <forms domain=".teknik.io" protection="All" enableCrossAppRedirects="true" name="TeknikAuth" />
  </authentication>
</system.web>

<system.webServer>
  <modules>
    <remove name="FormsAuthentication" />
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
  </modules>
</system.webServer>

配置文件控制器

public ActionResult Login(LoginViewModel model)
{
  ...

  authcookie.Name = "TeknikAuth";
  authcookie.HttpOnly = true;
  authcookie.Secure = true;
  authcookie.Domain = string.Format(".{0}", Config.Host); // ".teknik.io"
  Response.Cookies.Add(authcookie);

  ...
}

更新1

我已经确定它正在开发我的开发域(单域),然后当我访问主域时,cookie仍在运行。两者之间的唯一区别是,在开发时,登录请求位于同一个子域中,而在生产时,它将请求发送到另一个子域。

1 个答案:

答案 0 :(得分:1)

所以我弄清楚出了什么问题。登录(并设置cookie)时,我发送的帖子请求不同于我当前所在的域名(profile.teknik.io/Login)。这由于某种原因没有设置正确的cookie,因此没有发生auth。将登录名移至父域后,auth可在子域中正常工作。

更新1

真正的问题是登录的ajax请求。它没有启用CORS,所以一旦我这样做,并添加了相应的允许标头,请求就会起作用,并且cookie将被正确保存。