带有会话/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)
使用 Vue Axios (CORS) 发送/存储会话 cookie 时出现问题
XmlHttpRequest CORS POST 未发送 cookie