2009-05-30 52 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

相关问题