API GW Lambda代理集成CORS问题

3
尝试在我的业余项目网站上登录请求后发送cookie。由于某种原因,当本地运行即http://localhost:3000时,它可以工作。但是,一旦我将API推送到在线状态并尝试通过我的实时网站访问它,我在Application-> Cookies->网站下看不到cookie(使用chrome)。我已经搜索了很多,并且我相信我已经关闭了每个CORS策略。
nodeJS在AWS Lambda中运行,并通过API网关调用。 API GW通过cloudfront分发进行定向(如果有影响)。
在我的express后端中,我已相应记录了我的标头:
res.cookie('jwt', token, cookieOptions);
console.log('Checking cookie', res);
console.log('Checking cookie', res.cookies);

res.status(statusCode).json({
  status: 'success',
  data: {
    user
  }
});

这个的输出部分如下:
'access-control-allow-origin': [ 'Access-Control-Allow-Origin', 'https://example.com' ],
 vary: [ 'Vary', 'Origin' ],
 'access-control-allow-credentials': [ 'Access-Control-Allow-Credentials', 'true' ],
 'access-control-allow-methods':
  [ 'Access-Control-Allow-Methods',
    'GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS' ],
 'access-control-allow-headers':
  [ 'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, X-PINGOTHER' ],
 'x-ratelimit-limit': [ 'X-RateLimit-Limit', 100 ],
 'x-ratelimit-remaining': [ 'X-RateLimit-Remaining', 97 ],
 date: [ 'Date', 'Fri, 11 Dec 2020 23:20:28 GMT' ],
 'x-ratelimit-reset': [ 'X-RateLimit-Reset', 1607732145 ],
 quizappuserloggedin: [ 'QuizAppUserLoggedIn', 'false' ],
 'set-cookie':
  [ 'Set-Cookie', 'my-cookie'; Path=/; Expires=Sat, 12 Dec 2020 23:20:34 GMT; HttpOnly; Secure'

据我所知,我已正确设置了我的CORS设置。从我的前端,我已经设置了:

axios.defaults.withCredentials = true;

据我所知,我已经尽力在设置跨域请求的cookie方面做了一切。这意味着我已经仔细检查了我的cors设置,并且根据打印语句看起来cookie已经被发送了。但是为什么浏览器没有接收到呢?
如果有帮助的话,我可以发布实际网站和Github存储库,我已经卡在这里很长时间了。
更新:
我在浏览器中查看了响应头,并将其与后端api中的标题进行了比较。通过比较,我可以看到我的“set-cookie”标头未包含在响应中,尽管我清楚地看到它包含在来自后端的响应中:

enter image description here

更新2

经过进一步调查,我认为问题是与AWS API Gateway的CORS问题有关。我已经研究了这些问题,但仍然没有解决。

如何使用lambda代理集成激活向AWS API Gateway响应添加CORS标头

Amazon API网关忽略set-cookie

在express框架发送响应之前,Lambda CloudWatch日志以及API Gateway(响应标头)的CloudWatch日志。

API GW云监视器日志的响应标头:

API GW

Lambda云监控日志记录Express框架发送的响应对象:

LAMBDA


是的,这将是事实,但是如果您在另一个来源处运行的应用程序的 cookie 列表中看不到它。当向属于 cookie 的域发出请求时,cookie 会被附加。 - Nick
你是否发现在后续的请求中,你的请求对象不再具有cookie? - Nick
饼干从未在浏览器中出现过,我只在本地运行前端和API时看到它。 - Frankster
如果您正在使用 HttpOnly cookie,则它仍应该可以跨域工作。为了测试这一点,请尝试将您的本地后端或前端更改为 127.0.0.1,您会发现 cookie 仍然有效,但不会显示在 cookie 列表中。 - Nick
显示剩余10条评论
1个回答

0
原來這不是 CORS 問題,我只是忘記從我的 CloudFront 分發轉發 cookie。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接