有几个问题要求取消浏览器的HTTP身份验证对话框,他们似乎建议在响应代码为401
和WWW-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
答案 0 :(得分:1)
创建一个“登录”网页,需要基本身份验证并链接到该网页。它可以将元或JavaScript重定向回主应用程序;重定向仅在用户自己进行身份验证后才会应用。
您也可以使用JavaScript请求用户名和密码,然后通过后续的Ajax调用发送它们(请参阅https://stackoverflow.com/a/9613117/18706)。
答案 1 :(得分:0)
作为一种(临时?)解决方法,我现在将用户重定向到API,我提供了一个redirect
参数,当验证成功时,用户将重定向到该参数。