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

标签 ajax rest http authentication http-authentication

已经有几个问题要求抑制浏览器的 HTTP 身份验证对话框,他们似乎建议在响应代码为 401WWW-Authenticate< 时自动出现此对话框 header 出现在响应中。

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

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

{"error":"Authentication required"}

具有 404 状态。但是,我想创建一个端点 /user/login,它返回 401 代码和 WWW-Authenticate header 请求中不存在有效的 Authorization header 。我知道这不完全是 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

最佳答案

创建一个需要基本身份验证的“登录”网页并链接到它。它可以将元数据或 JavaScript 重定向回您的主应用程序;只有在用户通过身份验证后才会应用重定向。

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

关于ajax - 强制显示浏览器的 HTTP 身份验证对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30100944/

相关文章:

java - 如果后端是 URL,则 API 流从客户端到后端

php - Azure Key Vault 访问错误 - AADSTS700027 : Client assertion contains an invalid signature. [原因 - 通过 PHP 访问时 T(截断...)

java - CrudRepository 是怎么知道去哪张表取数据的呢?

.net - .NET 中的轻量级线程池库

python - 为什么每个浏览器窗口的 session 不是唯一的

php - Ajax/jQuery 使用数组填充 Laravel 中的表

java - 将 url 分配给 Java EE 项目中的 ajax (js) 函数

ajax - 发生管道损坏时如何处理 AJAX 响应?

javascript - PHP json_encode() - SQL 限制和 AJAX js

android - Retrofit 2.0 如何在不转换的情况下获取 JSON 对象?