CORS 和 HTTP 基本身份验证

Posted

技术标签:

【中文标题】CORS 和 HTTP 基本身份验证【英文标题】:CORS and HTTP basic auth 【发布时间】:2013-09-01 05:01:19 【问题描述】:

如果包含基本身份验证,预检 HTTP 请求会是什么样子?喜欢下面的对话吗?我无法理解哪些标头需要发送到哪里,也因为它无法使用 Firebug 正确调试它

客户:

OPTIONS /api/resource HTTP/1.1
Access-Control-Request-Method: GET
Origin: http://jsconsole.com

服务器:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Access-Control-Max-Age: 1728000
Access-Control-Allow-Credentials: true

客户:

GET /api/resource HTTP/1.1
Access-Control-Request-Method: GET
Access-Control-Allow-Credentials: true
Origin: http://jsconsole.com

服务器:

HTTP/1.1 401 Unauthorized
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Access-Control-Max-Age: 1728000
Access-Control-Allow-Credentials: true
WWW-Authenticate: Basic realm="Authorisation Required"

客户:

GET /api/resource HTTP/1.1
Access-Control-Allow-Credentials: true
Authorization: Basic base64encodedUserAndPassword
Access-Control-Request-Method: GET
Origin: http://jsconsole.com

服务器:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Access-Control-Max-Age: 1728000
Access-Control-Allow-Credentials: true

【问题讨论】:

在avalanche123.com/blog/2011/10/10/…avalanche123.com/blog/2011/10/10/…这篇文章的中途查看“CORS with basic auth”部分 不幸的是,雪崩博客条目已过时。 Chrome 完全支持基本身份验证。但是,除非您使用安全设置,否则 IE 不会。 【参考方案1】:

如果您请求凭据,则服务器必须使用 Access-Control-Allow-Origin 响应标头中的特定来源进行响应(因此不能使用通配符 *)。当然,它也需要使用 Access-Control-Allow-Credentials 响应标头进行响应。

【讨论】:

实际上并不需要 Access-Control-Allow-Headers。没有它,FF/Chrome 也能正常工作。但是 IE 的 CORS 实现根本不支持基本身份验证,除非您使用它的安全设置(启用跨域请求) 是的,这取决于您如何进行基本身份验证。如果您手动制作授权标头,那么您是对的,但如果您希望浏览器提供它,则需要允许凭据。

以上是关于CORS 和 HTTP 基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

带有基本 HTTP 身份验证的 CORS

具有 CORS 和基本身份验证支持的 WCF 自托管数据服务

为啥 Chrome 和 Firefox 使用基本身份验证的 CORS ajax 调用的行为不同?

Pentaho CDA:基本身份验证和 CORS 冲突

在 Angular 2 中使用基本身份验证预检 CORS 请求

具有基本身份验证的 Jersey cors 不起作用