javascript - 在进行需要身份验证的 ajax 调用时如何抑制浏览器的 "authentication required"对话框?

标签 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);
  }
});

最佳答案

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

类似地,代理总是可以返回一个 200 和一个 json 响应,指示转发请求的结果。通过这种方式,您可以区分代理失败和服务响应之间的区别。

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

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

关于javascript - 在进行需要身份验证的 ajax 调用时如何抑制浏览器的 "authentication required"对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626919/

相关文章:

javascript - iOS 是否有相当于 navigator.share 的工具来触发 native 分享功能?

php - 使用ajax获取值

javascript - Html 表行 ID 复选框

javascript - 为什么 noautohide 在 XUL 面板中不起作用?

javascript - ReactJS 无法在 IE11 中呈现

javascript - RegExp 和 String 组合导致 Chrome 崩溃

javascript - FullCalendar 叠加层不显示正确的值

javascript - 在ajax响应中加载列表对象并使用此数据创建动态列表div

firefox-addon - Firefox 插件中的 Ajax

javascript - 如何监控扩展/插件请求?