簡體   English   中英

ASP.NET 2.0站點中的ASP.NET 4.0應用程序是否可以使用相同的表單身份驗證cookie?

[英]Can an ASP.NET 4.0 application within an ASP.NET 2.0 site use the same Forms Authentication 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>

內部(ASP.NET 4.0)Web應用程序上的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"/>

這是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.寫入Forms authentication failed for the request. Reason: The ticket supplied was invalid. Forms authentication failed for the request. Reason: The ticket supplied was invalid. 到服務器上的事件日志。

如何讓內部ASP.NET 4.0 Web應用程序接受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" />

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

將此appsetting添加到兩個web.config文件中:

add key =“aspnet:UseLegacyFormsAuthenticationTicketCompatibility”value =“true”

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

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

跨應用程序表單身份驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM