我正在使用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仍在运行。两者之间的唯一区别是,在开发时,登录请求位于同一个子域中,而在生产时,它将请求发送到另一个子域。
答案 0 :(得分:1)
所以我弄清楚出了什么问题。登录(并设置cookie)时,我发送的帖子请求不同于我当前所在的域名(profile.teknik.io/Login)。这由于某种原因没有设置正确的cookie,因此没有发生auth。将登录名移至父域后,auth可在子域中正常工作。
更新1
真正的问题是登录的ajax请求。它没有启用CORS,所以一旦我这样做,并添加了相应的允许标头,请求就会起作用,并且cookie将被正确保存。