两个组成部分:
登录时,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'
。
我在这里想念什么?
浏览器永远不会在飞行前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协议的基本要求。