看到問題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/w8h3skw9(v=VS。 100).aspx)以及密鑰只是爲了確保。這是asp.net 1.1和2之間的問題 – davidsleeps 2012-01-13 02:14:38
剛剛嘗試過(和更新的問題),結果相同。 – geofftnz 2012-01-13 02:25:40