繁体   English   中英

预检请求中的跨域 cookies

[英]Cross-domain cookies in preflight requests

两个组件:

  1. https://react.mycompany.com上的 React 单页应用程序
  2. https://apigee.proxy.com上的 Apigee API 代理

登录时,Apigee 使用Set-Cookie header 设置jwt cookie:

Set-Cookie: jwt={jwtoken};secure;httponly;path=/;samesite=none

在客户端 Chrome 向我显示了框架https://react.mycompany.com的 cookie:

name: jwt
value: XXX
domain: apigee.proxy.com
path: /
httpOnly: true
secure: true
sameSite: none

现在,对于非身份验证请求,Apigee 在处理请求之前会检查jwt cookie 的存在。

cookie 不会在OPTIONS预检请求中发送,因此所有调用都会失败。

在客户端,我们使用fetch() API 和credentials: 'include'

我在这里想念什么?

浏览器永远不会在预检OPTIONS请求中发送 cookies 。 所以问题描述的是预期的行为。 浏览器不在预检中发送 cookies 的原因是因为 CORS 协议的规范要求浏览器从预检中排除 cookies 和所有其他标准标头凭据(例如,授权标头)。 请参阅https://fetch.spec.whatwg.org/#ref-for-credentials%E2%91%A5 ,其中指出:

CORS 预检请求从不包含凭据

…另见答案https://stackoverflow.com/a/50959576/441757

因此,预检发送到的服务器必须配置为允许未经身份验证的OPTIONS请求 - 并且必须以 200 OK 响应OPTIONS请求,即使请求不包含任何 cookies 或其他凭据。 这是 CORS 协议的基本要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM