ASP.NET 2.0网站中的ASP.NET 4.0应用程序是否可以使用相同的表单身份验证cookie?
看到问题ASP.NET 2.0网站中的ASP.NET 4.0应用程序是否可以使用相同的表单身份验证cookie?
的底部更新我有一个ASP.NET 2.0 Web应用程序(比如https://mysite.somedomain.com/
),它使用窗体身份验证。我希望在此网站中集成ASP.NET 4.0 Web应用程序,其编号为https://mysite.somedomain.com/NewApp/
。 Forms Auth正在处理外部应用程序,但内部应用程序正在拒绝Cookie。
在外侧(ASP.NET 2.0)的web应用程序web.config
包含:
<httpCookies requireSSL="true"/>
<authentication mode="Forms">
<forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All"
path="/" timeout="90" requireSSL="true" slidingExpiration="true"/>
</authentication>
<machineKey (same machine key is in both configs)
validation="SHA1"
decryption="AES"/>
<authorization>
<deny users="?"/>
<allow users="*" />
</authorization>
web.config
在内侧(ASP.NET 4.0)的web应用程序包含:
<authentication mode="Forms">
<forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All"
path="/" timeout="90" requireSSL="true" slidingExpiration="true"
ticketCompatibilityMode="Framework20"/>
</authentication>
<machineKey (same machine key is in both configs)
validation="SHA1"
decryption="AES"/>
这是代码在Login.aspx.cs中设置成功验证的cookie:
FormsAuthenticationTicket ticket =
new FormsAuthenticationTicket(
1,
ApplicationContext.User.Identity.Name,
DateTime.Now,
DateTime.Now.AddMinutes(90),
false,
ApplicationContext.User.Identity.SessionID.ToString()
);
HttpCookie cookie =
new HttpCookie(
FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(ticket)
);
cookie.Path = FormsAuthentication.FormsCookiePath;
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
如果我登录到外部Web应用程序,然后导航到内部Web应用程序中的页面,它将重定向到登录页面,并将Forms authentication failed for the request. Reason: The ticket supplied was invalid.
写入服务器上的事件日志。
如何获得内部ASP.NET 4.0 Web应用程序接受的ASP.NET 2.0窗体身份验证票证?
更新:它在HTTPS IIS 7.5下工作,但不在HTTPS IIS 7.0下工作。做更多的调查。
更新2:我们已将Server 2008 SP2应用于服务器以及近期针对散列冲突DoS的修补程序,并自此cookie共享生效。
我假设你读了这个 - http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx - 也许从你的4.0应用中删除ticketCompatibilityMode属性,或者至少确定它们是相同的。
除了几乎保持所有上述值相同的,你需要设置machineKey
元素的compatibilityMode
属性4.0应用程序的配置文件中:
<machineKey compatibilityMode="Framework20SP2" validationKey="THE_KEY" decryptionKey="ANOTHER_KEY" validation="SHA1" />
谢谢你的支持!我一直在与这个相同的问题摔跤,这是对我来说固定的。 – 2013-11-27 18:17:56
这appsetting添加到这两个的web.config文件:
添加键=“ASPNET:UseLegacyFormsAuthenticationTicketCompatibility” VALUE =“真”
您需要确保这两个应用程序具有相同的加密密钥在web.config文件中
<machineKey
validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
validation="SHA1" />
这可能是值得投入相同的解密和验证属性值(http://msdn.microsoft.com/en-us/library/w8h3skw9(v=VS。 100).aspx)以及密钥只是为了确保。这是asp.net 1.1和2之间的问题 – davidsleeps 2012-01-13 02:14:38
刚刚尝试过(和更新的问题),结果相同。 – geofftnz 2012-01-13 02:25:40