2012-01-13 66 views
6

看到問題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共享生效。

+0

這可能是值得投入相同的解密和驗證屬性值(http://msdn.microsoft.com/en-us/library/w8h3skw9(v=VS。 100).aspx)以及密鑰只是爲了確保。這是asp.net 1.1和2之間的問題 – davidsleeps 2012-01-13 02:14:38

+0

剛剛嘗試過(和更新的問題),結果相同。 – geofftnz 2012-01-13 02:25:40

回答

1

我假設你讀了這個 - http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx - 也許從你的4.0應用中刪除ticketCompatibilityMode屬性,或者至少確定它們是相同的。

+0

瀏覽器鏈接顏色表示我已經,但要再次閱讀它... – geofftnz 2012-01-13 02:45:59

+0

將domain =「thedomain」添加到了「」元素,結果相同(事件消息:表單身份驗證失敗,請求原因:提供的票證無效。) – geofftnz 2012-01-13 02:56:44

+0

我們在IIS7.5上使用HTTP(生產環境是HTTPS/IIS7.0),我們只是在7.5中將其設置爲HTTPS,以消除這種情況。 – geofftnz 2012-01-13 02:58:38

4

除了幾乎保持所有上述值相同的,你需要設置machineKey元素的compatibilityMode屬性4.0應用程序的配置文件中:

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

謝謝你的支持!我一直在與這個相同的問題摔跤,這是對我來說固定的。 – 2013-11-27 18:17:56

0

這appsetting添加到這兩個的web.config文件:

添加鍵=「ASPNET:UseLegacyFormsAuthenticationTicketCompatibility」 VALUE =「真」

0

您需要確保這兩個應用程序具有相同的加密密鑰在web.config文件中

<machineKey 
     validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
     decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
     validation="SHA1" /> 

Forms Authentication Across Applications

相關問題