Warm tip: This article is reproduced from serverfault.com, please click

javascript-使用Apigee进行预检请求中的跨域Cookie

(javascript - Cross-domain cookies in preflight requests using Apigee)

发布于 2020-11-30 13:49:14

两个组成部分:

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

登录时,Apigeejwt使用Set-Cookie标题设置cookie

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

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

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

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

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

在客户端,我们将fetch()API与结合使用credentials: 'include'

我在这里想念什么?

Questioner
Moritz Schmitz v. Hülst
Viewed
0
sideshowbarker 2020-12-02 00:03:35

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

CORS预检请求从不包含凭证

…另请参阅答案 https://stackoverflow.com/a/50959576/441757

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