2013-10-24 20 views
4

我試圖使POC可能有一個使用http和https的網站。所以我有一個控制在我的母版頁需要信息,如果用戶認證與否。爲此,我想使用HttpContext.Current.User.Identity.IsAuthenticated。如果通過身份驗證的用戶顯示信息,如果沒有出現登錄控制。ASP.NET MVC網站部分SSL身份驗證cookie未提交請求

要驗證控件,請向具有[RequireHttps]屬性的登錄操作發出AJAX POST請求。在AJAX請求中使用的網址是:

$.ajax({ type: 'POST', url: '@Url.Action("ModalLogIn", "Authentication", null, "https", Request.Url.Host + ":44300")',

通過我使用VS2013 IIS與SSL表達的方式啓用。

正如你可以在我的AJAX請求中看到的,我在動作url中使用了HTTPS。 使用SSL向服務器發出請求,並且成功完成響應。

問題是,在隨後的請求中,ASPXAUTH cookie沒有在請求頭中傳遞。所以服務器不會得到用戶認證信息。後續的請求都是在沒有SSL的情況下進行的,都是簡單的HTTP請求。

我知道,在安全方面的身份驗證仍然不安全,因爲我期望通過HTTP傳遞ASPXAUTH,但就像我說的是POC,我想看看是否有可能使用簡單的身份驗證請求HTTPS和所有其他使用HTTP的網站。

謝謝先進。

編輯

按照要求,這是響應頭:

Access-Control-Allow-Orig... * 
Cache-Control private 
Content-Length 15 
Content-Type application/json; charset=utf-8 
Date Sat, 26 Oct 2013 18:57:55 GMT 
Server Microsoft-IIS/8.0 
Set-Cookie ASP.NET_SessionId=j2a53htev0fjp1qq4bnoeo0l; path=/; HttpOnly 
ASP.NET_SessionId=j2a53htev0fjp1qq4bnoeo0l; path=/; HttpOnly 
IAC.CurrentLanguage=en; expires=Sun, 26-Oct-2014 19:57:55 GMT; path=/ 
.ASPXAUTH=730DEDBFD2DF873A5F2BD581AA0E25B685CAD12C26AEA63AD82484C932E26B617687A05BB403216CC5EFCF799970810059F9CA2CF829F953580AF81FF48102003C0129AB04424F0D011A733CAAF1DE00688E5A4C93DEA97338DD2B5E7EE752F3761A470D52449BEBCA74098912DE37AA8C1E293B1C5D44EB1F9E9384DAAEF289; path=/; HttpOnly 
    X-AspNet-Version 4.0.30319 
    X-AspNetMvc-Version 3.0 
X-Powered-By ASP.NET 
X-SourceFiles =?UTF-8?B?QzpcTXkgRGF0YVxCaXRidWNrZXRcaWFjLXdlYnNpdGVcaW1wbGVtZW50YXRpb25cZG90bmV0XElBQy5XZWJcQXV0aGVudGljYXRpb25cTW9kYWxMb2dJbg==?= 
+0

檢查從服務器發送cookie時路徑是什麼。如果可能的話,將cookie響應頭添加到您的問題中。 – user1429080

+0

@ user1429080添加了響應頭文件 –

+0

那麼cookie的路徑設置爲/,所以推測問題出現在域中。有關影響Cookie域的討論,請參閱此問題和相應的答案:[link](http://stackoverflow.com/questions/1612177/are-http-cookies-port-specific)。 – user1429080

回答

1

這可能是當你設置身份驗證cookie時,它被標記爲「安全」。

使用Chrome開發者工具,點擊「資源」,然後點擊cookies。在「安全」列下檢查cookie是否被標記。如果是,那麼這意味着瀏覽器不會使用非安全連接發送auth cookie。

+0

我已經檢查過了。 AJAX響應頭中的Cookie .ASPXAUTH具有Secure = false和HttpOnly = false。但是我確實在Chrome開發者工具中做過。 –

1

只是在黑暗中拍攝,但嘗試設置ASPXAUTH cookie的過期日期。

瀏覽器在接收到會話cookie時,只會在使用與設置時相同的協議(https)的連接上呈現會話cookie。我確信持久性cookies沒有這個限制。

此外,調查端口是否可能是問題。如果您的AJAX超過44300並且您的網絡超過80或443,則可能由於瀏覽器將安全cookie視爲特定於端口的cookie而丟失cookie。 W3C規範沒有說明cookies是否對於端口是私有的;瀏覽器各不相同。

0

所有的東西都像JS那樣以HTTPS方式發出ajax請求。相關響應也能正確工作。但似乎你還沒有準備好SSL登錄頁面!我的意思是:

[RequireHttps] 
public ActionResult Login() 
{ 
    return View(); 
} 

然後發送請求到HttpPost enabled Action。我相信會正常工作。除非你的ViewEngine(也許是Razor)正在使用正式的Microsoft Ajax表單的情況下,你沒有像MicrosoftMvcAjax.jsMicrosoftAjax.js這樣的需求。我認爲學習this Article可以幫助你更多。

祝你好運。