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

时间:2015-05-07 12:20:34

标签: ajax rest http authentication http-authentication

有几个问题要求取消浏览器的HTTP身份验证对话框,他们似乎建议在响应代码为401WWW-Authenticate标题时自动显示此对话框在答复中出现。

我正在构建一个使用Ajax调用RESTful API的Web应用程序,该API受基本HTTP身份验证保护。我正在使用网络应用和API。

默认行为是,当需要身份验证但不存在时,只需提供错误

{"error":"Authentication required"}

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

我现在实现了这一点,当我在浏览器中打开端点时,它运行正常:浏览器的对话框显示。但是,当我使用Ajax请求端点时,不显示任何对话框(Chromium和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

2 个答案:

答案 0 :(得分:1)

创建一个“登录”网页,需要基本身份验证并链接到该网页。它可以将元或JavaScript重定向回主应用程序;重定向仅在用户自己进行身份验证后才会应用。

您也可以使用JavaScript请求用户名和密码,然后通过后续的Ajax调用发送它们(请参阅https://stackoverflow.com/a/9613117/18706)。

答案 1 :(得分:0)

作为一种(临时?)解决方法,我现在将用户重定向到API,我提供了一个redirect参数,当验证成功时,用户将重定向到该参数。