有跡象表明,要求抑制瀏覽器的HTTP認證對話框已經有幾個問題,他們似乎表明,當響應代碼爲401
和WWW-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
我採用第二種方法,但由於安全原因不想在本地存儲用戶名和密碼。所以,我在需要密碼的API中實現了一個令牌端點。該令牌有效一段時間,可用於登錄,並可以本地存儲在cookie中。用戶可以將令牌鏈接到他的IP。對於重要的操作,例如更改電子郵件地址和密碼,我仍然需要密碼認證(類似於GitHub的sudo模式),因此cookie竊取不是什麼大問題。不管怎樣,謝謝! – Keelan
是的,令牌交換對於提高安全性很有意義。 – mahemoff