我在同一域中有两个应用程序,如下所示:
http://example.com/MvcApp
http://example.com/WebFormsApp
正如预期的那样,一个是 ASP.NET MVC 5,另一个是 Web Forms,两者都使用 .NET Framework 4.6.1。
MVC 应用程序
在 ASP.NET MVC 5 中,我创建表单身份验证 cookie,如下所示:
var ticket = new FormsAuthenticationTicket(1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(30),
true,
userData,
FormsAuthentication.FormsCookiePath
);
var encTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Response.Cookies.Add(cookie);
我的 web.config 如下所示:
<system.web>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="/Account/Login" defaultUrl="default.aspx" protection="All" timeout="60" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false" cookieless="UseDeviceProfile"/>
</authentication>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<machineKey validationKey="D011D22E385D3BC154D5CF0FCC15EF4843A468FB866FD6EEC533E1E30E6F097232DD9698E62DE6F176BA0DAB9E6925089EB25B20C57C659DD52F78DC025E192B" decryptionKey="5A350E0E7EDF07E5633B492B2F1A17ABC4DF5CF55C8922BD021C344ACE66CA42" validation="SHA1" decryption="AES"/>
</system.web>
网络表格应用程序
在 Web 表单应用程序中,web.config 如下所示:
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="pt-BR"/>
<customErrors mode="Off"/>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="che-login-win.aspx" defaultUrl="default.aspx" protection="All" timeout="60" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false" cookieless="UseDeviceProfile"/>
</authentication>
<identity impersonate="true"/>
<authorization>
<deny users="?"/>
</authorization>
<machineKey validationKey="D011D22E385D3BC154D5CF0FCC15EF4843A468FB866FD6EEC533E1E30E6F097232DD9698E62DE6F176BA0DAB9E6925089EB25B20C57C659DD52F78DC025E192B" decryptionKey="5A350E0E7EDF07E5633B492B2F1A17ABC4DF5CF55C8922BD021C344ACE66CA42" validation="SHA1" decryption="AES"/>
<httpRuntime requestValidationMode="2.0" maxRequestLength="8192" executionTimeout="9999"/>
</system.web>
您可能已经注意到,两个 web.configs 使用相同的名称forms
标签,并且它们使用相同的机器密钥属性。它们驻留在我的 IIS 中的同一网站内,位于同一域(没有子域)下。
当我登录 MVC 应用程序时,如果打开浏览器控制台,我可以看到 Cookie 的名称是我在 web.config 中设置的。
但是,如果我打开 Web 表单应用程序,它会将我重定向到登录页面,就好像我没有登录一样。当我在 Web 表单应用程序选项卡中打开浏览器控制台时,我也可以在那里看到 cookie。
Web 表单项目有一个登录页面,它像 MVC 一样创建 Forms Ticket 和 Cookie,当我从那里登录时,它就可以工作。
我缺少什么?