我正在尝试编写一个AWS Lambda函数,该函数设置Cloudfront签名的Cookie来访问私有的Cloudfront (S3)端点(使用this tutorial作为指南)。
因为我的应用程序使用AWS Cognito进行授权,而不是编写自定义授权函数,所以我想我只需要在API Gateway中使用Cognito授权器并发送JWT令牌。
我已经能够通过浏览器中的功能成功地设置cookie,但在设置访问cookie信息所需的正确域时遇到问题。cookie正在为API Gateway的地址设置域:xxxx.execute-api.us-east-1.amazonaws.com
因此,我认为我应该在API Gateway端点(它通过Cloudfront端点路由调用)上使用自定义域名。我遇到的问题是API Gateway的Cognito Authorization头需要一个OPTIONS
调用,这给了我一个错误:
Access to fetch at 'xxxxx' from origin 'xxxxx' has been blocked
by CORS policy: Response to preflight request doesn't pass access
control check: Redirect is not allowed for a preflight request.
对解决这个问题的最好方法有什么建议吗?有没有办法在不使用API自定义域的情况下设置正确的域?或者,我是否应该将cookie信息作为JSON发送并在浏览器中进行设置?
发布于 2019-09-13 22:36:33
事实证明,这是API Gateway域名端点上的Cloudfront Edge发行版的问题。AWS正在将调用者重定向到最近的端点,该端点导致OPTIONS调用出现问题。通过将自定义域直接切换到一个特定的区域端点,我能够解决这个问题。
https://stackoverflow.com/questions/57909360
复制相似问题