c# - ASP.NET 2.0 站点中的 ASP.NET 4.0 应用程序能否使用相同的表单例份验证 cookie?

标签 c# asp.net iis-7 forms-authentication

查看问题底部的更新

我有一个使用表单例份验证的 ASP.NET 2.0 Web 应用程序(比如 https://mysite.somedomain.com/)。我希望在此站点中集成一个 ASP.NET 4.0 Web 应用程序,基于 https://mysite.somedomain.com/NewApp/。 Forms Auth 正在处理外部应用程序,但内部应用程序正在拒绝 cookie。

web.config 在外部 (ASP.NET 2.0) 网络应用程序中包含:

<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>
内部 (ASP.NET 4.0) 网络应用程序的

web.config 包含:

<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"/>

这是在成功验证时设置 cookie 的 Login.aspx.cs 中的代码:

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。原因:提供的票证无效。 添加到服务器上的事件日志。

如何让内部 ASP.NET 4.0 网络应用程序接受 ASP.NET 2.0 Forms Auth 票证?

更新:它在 HTTPS IIS 7.5 下工作,但在 HTTPS IIS 7.0 下不工作。进行更多调查。

更新 2:我们已将 Server 2008 SP2 连同哈希冲突 DoS 的最新补丁应用到服务器,从那时起,cookie 共享就开始工作了。

最佳答案

除了保持几乎所有上述值相同之外,您还需要在 4.0 应用程序的配置文件中设置 machineKey 元素的 compatibilityMode 属性:

<machineKey compatibilityMode="Framework20SP2" validationKey="THE_KEY" decryptionKey="ANOTHER_KEY" validation="SHA1" />

关于c# - ASP.NET 2.0 站点中的 ASP.NET 4.0 应用程序能否使用相同的表单例份验证 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8845044/

相关文章:

c# - 当我使用 VS 2010 SP1 Beta 打开一个新项目时,ASP.NET MVC 3 挂起

c# - 在构造函数中使用 IEqualityComparer 的通用集合

javascript - 使用 sammy.js 重新加载页面

c# - 用逗号 MVC 5 格式化十进制值

asp.net-mvc - 如何在我的 MVC 应用程序有机会处理它之前阻止 IIS7 推出自己的 404?

c# - 检查用户名和密码的类型是用于客户端还是管理员

c# - 在C#中调用MySql函数来验证用户名和密码

asp.net - 以 kwargs 为单位的动态值

iis-7 - 服务不可用 503 + 位于 http ://localhost/ProductsService/Service. svc 的 HTTP 服务太忙

iis-7 - Octopus Deploy 不更新网站