带有会话/cookie 的 CORS 请求

Posted

技术标签:

【中文标题】带有会话/cookie 的 CORS 请求【英文标题】:CORS requests with session/cookie 【发布时间】:2016-04-30 07:48:44 【问题描述】:

我的应用程序有一个 php 服务器和一个客户端(一个 JS 单页应用程序)。它们是独立的项目并部署在不同的域中。客户端使用服务器公开的 RESTful API。

此应用程序将与处理身份验证的第三方集成,因此用户无法直接登录。我们的服务器只收到一个 SSO 令牌(经过适当签名,以便我们验证其完整性)。

我们还在传输层对所有请求实施安全措施。

我想做的是,一旦 SSO 令牌得到验证,就开始我自己的会话,然后将用户重定向到客户端。我以为一旦创建了会话,浏览器就会在异步 API 调用中自动发送正确的 Cookie 标头,但事实并非如此。

是否出于安全原因故意禁用此功能?

【问题讨论】:

【参考方案1】:

您必须将 withCredentials 设置为 true 以使跨域 XHR 请求包含 cookie。

CORS 响应还必须说 Access-Control-Allow-Credentials: true(这就是为什么 widthCredentials 默认为 false)。

【讨论】:

非常感谢。这行得通。我接受这个答案而不是 @CBroe 的,因为这个答案还提到了 Access-Control-Allow-Credentials 标头。附带说明,Access-Control-Allow-Origin 不能是通配符 (*)。【参考方案2】:

我认为一旦创建会话,浏览器会自动在异步 API 调用中发送正确的 Cookie 标头

不适用于启用 CORS 的资源的跨域请求(如果我正确理解您描述的设置,这里似乎就是这种情况。)

要做到这一点,您需要设置 withCredentials 标志。

【讨论】:

以上是关于带有会话/cookie 的 CORS 请求的主要内容,如果未能解决你的问题,请参考以下文章

CORS $.ajax 会话 cookie(访问控制允许凭据和 withCredentials=true)

会话 cookie 与 JWT

使用 Vue Axios (CORS) 发送/存储会话 cookie 时出现问题

XmlHttpRequest CORS POST 未发送 cookie

Firefox 未设置通过 XHR CORS 请求接收的 Cookie

cookie小结