2009-05-30 23 views
13

我在寫一些瀏覽器端的動態功能,並使用HTTP Basic Auth來保護一些資源。用戶體驗非常重要,並且高度自定義。如何通過HTTP Basic Auth和JQuery AJAX來阻止Firefox提示用戶名/密碼?

這裏有一個簡單的測試,JQuery的方法,如果用戶已提供的形式正確的憑證,最終將考驗:

$(document).ready(function() { 
    $("#submit").click(function() { 
    var token = Base64.encode($('#username').val() + ':' + $('#password').val());   
    $.ajax({ 
     url: '/private', 
     method: 'GET', 
     async: false, 
     beforeSend: function(req) { 
     req.setRequestHeader('Authorization', 'test:password'); 
     }, 
     error: function(request, textStatus, error) { 
     if (request.status == 401) { 
      alert('401'); 
     } 
     } 
    }); 
    return false; 
    }); 
}); 

如果他們不允許訪問/private,此刻他們應該看到剛警報框。但是,在Firefox上,會彈出一個瀏覽器提供的登錄窗體(以新憑據重試)。 Safari不會這樣做。

我們希望完全控制自定義窗體,淡入淡出,過渡等的體驗。如何保持Firefox的默認框不顯示? (如果這將是一個問題,當我們測試的IE瀏覽器,我很樂意聽到的解決方案在那裏,太)

+1

請注意後續在http://stackoverflow.com/questions/928967/can-i-coerce-apache-into-not-including-a-www-authenticate-header-for-failed-http。 – 2009-05-30 04:49:32

回答

3

不幸的是,我在這裏碰到同樣的問題。

在我看來,瀏覽器不應該提示xmlhttprequest。我真的希望有人會推動,導致人們真的想轉移到jQuery的身份驗證需求。

那麼這裏是我可以給你的幫助,我發現這個jQuery Digest的東西,我不知道它的真正作用或任何東西,但是如果有人可以正確地使用這個代碼,我們可以有一個jQuery文摘認證系統。

https://www.openhub.net/p/digestj

我想用這個方便的新AuthDigestDomain選項,我們可以有上面的腳本改寫或什麼,並有保安區「鏈接」在一起,我們可以得到過去的這個問題一勞永逸。那麼...祝你好運=)

35

解決方法是將WWW-Authenticate標題設置爲Basic以外的其他標題。例如將其設置爲:基於

WWW-Authenticate: None 

WWW-Authenticate: FormBased 
如果使用

形式登錄。然後瀏覽器不會顯示登錄窗口。

+1

正如相關問題的回答評論所示。 「WWW-Authenticate」應該表示一個(或多個)有效的挑戰。我也認爲`沒有'不是真正的。 http://stackoverflow.com/questions/1748374/http-401-whats-an-closed-www-authenticate-header-value#comment-33722946 – mems 2014-10-08 11:34:31

相關問題