强制显示浏览器的 HTTP 身份验证对话框



已经有几个问题要求抑制浏览器的HTTP身份验证对话框,它们似乎建议当响应代码为 401时,该对话框自动出现,而WWW-Authenticate标头则存在于响应。

我正在构建一个使用AJAX调用RESTFUL API的Web应用程序,该应用程序受基本HTTP身份验证保护。我正在研究Web应用程序和API。

默认行为是,当需要身份验证但不存在时,只需给出一个错误

{"error":"Authentication required"}

具有404状态。但是,我想创建一个端点/user/login,当请求中没有有效的Authorization标头时,它会返回401代码和WWW-Authenticate标头。我知道这并不是完全宁静,但应该起作用。

我现在已经实现了此功能,当我在浏览器中打开端点时,它可以正常工作:浏览器的对话框显示。但是,当我使用Ajax请求端点时,未显示对话框(铬和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

创建一个需要基本auth并链接到它的"登录"网页。它可以将元或JavaScript重定向回到您的主要应用程序;重定向只有在用户身份验证自己身份验证之后才能应用。

您可以使用JavaScript请求用户名和密码,然后随后的AJAX呼叫发送它们(请参阅https://stackoverflow.com/a/9613117/18706)。

作为(临时?)解决方案,我现在将用户重定向到API,我给出了一个redirect参数,当身份验证成功时,用户将其重定向到该参数。

最新更新