Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net表单与子域的身份验证_C#_Asp.net_Asp.net Mvc 5_Subdomain_Forms Authentication - Fatal编程技术网

C# Asp.Net表单与子域的身份验证

C# Asp.Net表单与子域的身份验证,c#,asp.net,asp.net-mvc-5,subdomain,forms-authentication,C#,Asp.net,Asp.net Mvc 5,Subdomain,Forms Authentication,我使用MVC5运行单个asp.net 4.5.2应用程序。我有定制的例程来处理应用程序每个区域的子域 我在其中一个区域(配置文件)中拥有我的用户身份验证,这是它自己的子域。在导航栏中,有一个登录表单,它发布到概要文件控制器的login()操作。由于这是一个子域,我正在手动设置身份验证的域信息,以使其在所有子域中工作 就我的一生而言,我不知道如何让它发挥作用。我尝试将表单Auth域设置为TLD,TLD带有一个。在前面,在webconfig中使用表单信息,而不使用 以下是有关表单验证的重要信息: W

我使用MVC5运行单个asp.net 4.5.2应用程序。我有定制的例程来处理应用程序每个区域的子域

我在其中一个区域(配置文件)中拥有我的用户身份验证,这是它自己的子域。在导航栏中,有一个登录表单,它发布到概要文件控制器的login()操作。由于这是一个子域,我正在手动设置身份验证的域信息,以使其在所有子域中工作

就我的一生而言,我不知道如何让它发挥作用。我尝试将表单Auth域设置为TLD,TLD带有一个。在前面,在webconfig中使用表单信息,而不使用

以下是有关表单验证的重要信息:

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>
更新1


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

因此我发现了问题所在。登录(并设置cookie)时,我将post请求发送到与当前所在域不同的域(profile.teknik.io/Login)。由于某些原因,这没有设置正确的cookie,因此没有进行身份验证。一旦我将登录名移动到父域,身份验证就可以跨子域正常工作

更新1

真正的问题是ajax请求登录。它没有启用CORS,所以一旦我启用了CORS,并添加了相应的allow头,请求就会工作,cookies就会正确保存

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

  ...
}