为啥我的服务器会忽略来自 ajax 请求的身份验证标头?

Posted

技术标签:

【中文标题】为啥我的服务器会忽略来自 ajax 请求的身份验证标头?【英文标题】:Why my server ignores the authentication headers from an ajax request?为什么我的服务器会忽略来自 ajax 请求的身份验证标头? 【发布时间】:2013-02-21 15:13:09 【问题描述】:

来自我使用的 javascript

xhr.setRequestHeader("Authorization", make_base_auth(username,password));

但是 HTTP 请求没有 Authorization 标头:

OPTIONS /restService/index?_=1362589672203 HTTP/1.1
Host: myappinheroku.herokuapp.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-MX,es-ES;q=0.8,es-AR;q=0.7,es;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Origin: http://127.0.0.1:8081
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization,content-type
Connection: keep-alive

似乎完全忽略了身份验证。怎么了?我们如何为 CORS 启用身份验证?


这是服务器对上述请求的响应:

HTTP/1.1 401 Full authentication is required to access this resource
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: origin, authorization, accept, content-type, x-requested-    with
Access-Control-Allow-Methods: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3600
Server: Jetty(7.x.y-SNAPSHOT)
Set-Cookie: JSESSIONID=6smxjnlqelmc1lg98ain16wv7;Path=/
WWW-Authenticate: Basic realm="Ralph's Bait and Tackle"
Transfer-Encoding: chunked
Connection: keep-alive

【问题讨论】:

您是如何获得请求和响应的?尝试查看 Fiddler 并将它们与有效请求进行比较。 @CodeCaster 我收到了 Firebug 的请求,一个有效的请求发送如下内容:授权:基本 YXNkZjphZg== 但我的请求发送了一个全局标头:Access-Control-Request-Headers:授权,内容-类型 【参考方案1】:

Access-Control-Allow-Credentialstrue 时,Access-Control-Allow-Origin 标头不能使用值 *。您需要将 Access-Control-Allow-Origin 设置为 Origin 本身的值(即在本例中为 http://127.0.0.1:8081)。

另请注意,验证凭据不会在预检请求中发送。它们仅在实际请求时发送。预检仅用于验证是否允许 CORS 请求,它本身不应进行任何身份验证。

【讨论】:

以上是关于为啥我的服务器会忽略来自 ajax 请求的身份验证标头?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使对于同一个站点 Ajax 请求也需要 XMLHttpRequest.withCredentials

通过 Ajax 请求时完成 OpenIDConnect 身份验证

无法在 ajax 中处理 302 重定向,为啥? [复制]

在ajax请求期间处理MVC表单身份验证到期[重复]

PatchEntity 在 Cakephp 3.0 中忽略来自 ajax 请求的数据

MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求