所以我有一個工作圍繞這一點,但如果任何人有任何更好的想法,請隨時發表評論。實質上,您需要在請求結束時截獲響應,並在表單身份驗證Cookie上手動設置Secure屬性,這很明顯,您還需要將Forms身份驗證配置中的requireSSL屬性設置爲false。另外請記住,我們不希望爲整個網站啓用HTTPS以便通過身份驗證的用戶,因此可以解決此問題。
這種方法有幾個注意事項,需要注意的幾件事情。
我測試該窗體身份驗證cookie總是寫在響應過程中發現,所以我一直覆蓋在瀏覽器中有效的身份驗證cookie與一個空驗證cookie,來解決這個問題我包括在一些邏輯HTTP模塊來解決這個問題,請參閱下面的代碼片段。
對需要授權的應用程序的所有請求都必須在SSL之下,否則請求將不包含驗證cookie以驗證用戶身份。
由於您只傳遞SSL請求的身份驗證Cookie,因此您需要使用另一種機制來告訴您的應用程序當前用戶在瀏覽網站的非SSL區域時進行了身份驗證,我已經使用其他cookie實施了此操作這是在用戶登錄時設置的,並且沒有設置過期日期,因此將在用戶會話結束時過期,當用戶註銷時該cookie將被刪除。
下面是一個HTTP模塊實現的影響上面的邏輯,我一直在這最後幾個小時測試和跨越任何問題都還沒來,我會知道,如果要更新這個帖子我做!如果用戶剛剛登陸這裏
我們應該永遠只能發送身份驗證cookie到客戶端的邏輯
- 如果請求有一個權威性的cookie的用戶已經通過身份驗證 和SSL下所以請確保我們不會在 響應中發送新的身份驗證Cookie。
- 如果請求中沒有auth cookie,但響應中存在有效的 auth cookie,請將響應auth cookie設置爲安全, ,以便它僅由SSL下的瀏覽器傳輸。
- 如果請求沒有auth cookie,並且響應中有一個 無效或空的auth cookie,請確保我們刪除了響應cookie ,以便我們不覆蓋客戶端瀏覽器中的有效cookie。
private void EndRequest(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
if (ValidRequest(application.Request) && application.Response.Cookies.Count > 0)
{
//only do the below if the user is not logging out the site, if the user is logging out we can
//leave the default forms authentication behaviour which is to expire the auth cookie
if (application.Request.AppRelativeCurrentExecutionFilePath != "~/authentication/logoff")
{
var requestAuthCookie = application.Request.Cookies[FormsAuthentication.FormsCookieName];
var responseAuthCookie = application.Response.Cookies[FormsAuthentication.FormsCookieName];
if (requestAuthCookie != null && responseAuthCookie != null && responseAuthCookie.Value.IsNullOrEmpty())
{
application.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
}
else if (responseAuthCookie != null && !responseAuthCookie.Value.IsNullOrEmpty())
{
responseAuthCookie.Secure = true;
application.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
application.Response.Cookies.Add(responseAuthCookie);
}
else if (responseAuthCookie == null || responseAuthCookie.Value.IsNullOrEmpty())
{
application.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
}
}
}
}
+1,我也會對這個問題的解決方案感興趣。 – 2010-10-28 15:25:31