首页 > 解决方案 > API GW Lambda 代理集成 CORS 问题

问题描述

在我的爱好项目网站上的登录请求后尝试发回 cookie。由于某种原因,它在本地运行时工作,即 http://localhost:3000。但是,当我将我的 API 推送到网上并尝试通过我的实时网站访问它时,我在 Application -> Cookies -> website (使用 chrome) 下看不到任何 cookie。我用谷歌搜索了很多,我相信我已经检查了每一个 CORS 政策。

nodeJS 在 AWS lambda 中运行,并通过 API 网关调用。API GW 通过云端分发(如果重要)定向到。

在我的快递后端,我已经相应地记录了我的标题:

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 repo,我已经被困在这里了。

更新

我查看了浏览器中的响应标头,并将其与后端 api 中的标头进行了比较。从该比较中,我可以看到我的“set-cookie”标头未包含在响应中,即使我可以清楚地看到它包含在来自后端的响应中:

在此处输入图像描述

更新 2

我相信经过进一步调查,我已将其缩小为 AWS API Gateway 的 CORS 问题。我调查了这些,但仍然没有运气。

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

Amazon API 网关忽略 set-cookie

在 express 框架发送响应之前来自 lambda cloudwatch 的日志以及来自 API 网关的 cloudwatch 日志(响应标头)。

响应标头的 API GW cloudwatch 日志:

API网关

express框架发送的响应对象的Lambda cloudwatch日志:

兰姆达

标签: expresscookiesaws-lambdaaws-api-gatewayamazon-cloudfront

解决方案


事实证明这不是 CORS 问题。我只是忘记从我的云端分发中转发 cookie。


推荐阅读