如何在执行需要身份验证的ajax调用时禁止浏览器的"需要身份验证"对话框?

mak*_*eee 6 javascript ajax firefox-addon

我的用户输入第三方服务的用户名和密码.我对该服务进行ajax调用以验证它们.问题是如果他们输入错误的用户名和密码,浏览器(至少是firefox)将显示"需要身份验证"对话框.如果他们然后在该对话框中输入正确的用户名和密码,我的ajax调用将返回"成功",并且看起来他们输入的原始用户/传递是正确的,而不是(因为他们更改了它).

有什么办法要么取消此对话框(这样我就可以再有我的服务告诉他们改正自己的用户名/密码),或以某种方式抓住了正确的用户名和密码,用户在浏览器对话框中输入?这是一个firefox扩展..所以我确定有一些方法可以从请求中获取正确的传递/登录..但如果有一个更简单的方法通过javascript将是很好的.

jQuery.ajax({
  type: "GET",
  dataType: "xml",
  url: endpoint,
  username: username,
  password: password,
  success: function(data,status) {
    // Do something
  },
  error: function(XMLHttpRequest, textStatus, errorThrown){
    alert(errorThrown);
  }
});
Run Code Online (Sandbox Code Playgroud)

Ed.*_*Ed. 1

我通过在浏览器和需要身份验证的服务(在我的例子中是一个 java servlet)之间放置一个代理来解决这个问题。浏览器将 AJAX 请求发送到 servlet,servlet 将请求转发到服务,然后发回服务的响应,省略“WWW-Authenticate”标头。您的浏览器应用程序。相应地处理 HTTP 200 或 401 响应代码。

同样,代理始终可以返回 200 和 json 响应,指示转发请求的结果。通过这种方式,您可以辨别代理故障和服务响应之间的区别。

您可能需要处理一件棘手的事情 - 如果远端服务以 set-cookie 标头响应,比如说因为它为您的客户端创建了一个会话,那么您(至少)有 2 条可能的路径可供选择。

  1. 您的代理会记住您的浏览器应用程序的 cookie。该服务总是经过代理,并且代理将此 cookie 添加到后续转发的请求中。或者
  2. 您忽略服务的 cookie,并在通过代理验证用户名和密码后让浏览器直接与服务重新进行身份验证。尽管这可能会产生与服务创建孤立会话的副作用