2015-05-07 58 views
1

有跡象表明,要求抑制瀏覽器的HTTP認證對話框已經有幾個問題,他們似乎表明,當響應代碼爲401WWW-Authenticate頭存在於響應自動出現該對話框。強制顯示瀏覽器的HTTP認證對話框

我要建一個調用使用Ajax,這是基本的HTTP認證保護的一個RESTful API的Web應用程序。我正在開發Web應用程序和API。

的默認行爲是,當需要驗證,但不存在,簡單地給一個錯誤

{"error":"Authentication required"} 

404狀態。然而,我想創建一個端點,/user/login,當存在出現在請求中沒有有效Authorization報頭返回401碼和WWW-Authenticate報頭。我知道這不完全RESTful,但它應該工作。

我現在已經實現了這個,當我在瀏覽器中打開端點正常工作:瀏覽器的對話節目。但是,當我使用Ajax請求端點時,不會顯示任何對話框(包括Chromium和Firefox)。

如何強制顯示這個對話框有一個Ajax請求,如果可能的話?

確切的迴應是現在:

HTTP/1.1 401 Unauthorized 
Server: nginx/1.4.6 (Ubuntu) 
Content-Type: text/html; charset=UTF-8 
Transfer-Encoding: chunked 
Connection: keep-alive 
X-Powered-By: PHP/5.5.9-1ubuntu4.9 
Access-Control-Allow-Origin: http://my-url 
Cache-Control: no-cache 
Date: Thu, 07 May 2015 12:21:10 GMT 
WWW-Authenticate: Basic realm="Please login" 

Please login 

回答

1

創建一個需要基本認證並鏈接到它的「登錄」網頁。它可以將元數據或JavaScript重定向回您的主應用程序;重定向只會在用戶驗證自己之後應用。

你可以交替使用JavaScript只是要求用戶名和密碼,隨後阿賈克斯給他們電話(見https://stackoverflow.com/a/9613117/18706)。

+1

我採用第二種方法,但由於安全原因不想在本地存儲用戶名和密碼。所以,我在需要密碼的API中實現了一個令牌端點。該令牌有效一段時間,可用於登錄,並可以本地存儲在cookie中。用戶可以將令牌鏈接到他的IP。對於重要的操作,例如更改電子郵件地址和密碼,我仍然需要密碼認證(類似於GitHub的sudo模式),因此cookie竊取不是什麼大問題。不管怎樣,謝謝! – Keelan

+0

是的,令牌交換對於提高安全性很有意義。 – mahemoff

0

爲A(?暫時的)解決辦法,現在我將用戶重定向到API,這是我給一個redirect參數,用戶被重定向回來的時候驗證已成功。

相關問題