【问题标题】:How to redirect with CORS with lambda如何使用带有 lambda 的 CORS 进行重定向
【发布时间】:2020-12-30 12:49:03
【问题描述】:

我收到以下错误

Access to fetch at 'https://mywebsite.com/private-post.html' 
(redirected from 'https://api.mywebsite.com/login') 
from origin 'https://mywebsite.com' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
If an opaque response serves your needs, 
set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我已将以下 cors 预检设置为 https://api.mywebsite.comhttps://mywebsite.com 是静态网站。我不确定它是否有cors。

Access-Control-Allow-Origin: ['https://mywebsite.com', 'https://api.mywebsite.com']
Access-Control-Allow-Headers: [*]
Access-Control-Allow-Methods: [DELETE, GET, OPTION, PUT, HEAD, PATCH, POST]
Access-Control-Allow-Credentials: true 

首先我从https://mywebsite.com/login.htmlhttps://api.mywebsite.com/login 端点发出发布请求。成功登录后,我正在使用 lambda 进行重定向。虽然有以上的cors。由于上述错误,我无法重定向到任何页面。

const response = {
        statusCode: 303,
        headers: {
            'Location': 'https://mywebsite.com/private-post.html'
        }
    }

    return response

编辑

我尝试设置Access-Control-Allow-Origin: [*],但无法设置Access-Control-Allow-Credentials: true

为了解决这个问题,我现在设置了Access-Control-Allow-Origin: ['https://*'],我可以允许凭据,但是在重定向时,cors 错误仍然保持不变。

【问题讨论】:

  • 你试过在标题中设置mode: no-cors吗?
  • 在发回响应时尝试将Access-Control-Allow-Headers:*设置为响应对象中的标头。
  • 如果我设置Access-Control-Allow-Headers:*,则不支持Access-Control-Allow-Credentials: true。没有那个我无法登录。我确实设置了mode: no-cors 仍然 lambda 自动将access-control-allow-origin: https://mywebsite.commode:no-cors 添加到标题中。

标签: api lambda cors amp-html


【解决方案1】:

https://mywebsite.com 是静态网站。我不确定它是否有cors。

错误消息天没有,但是,由于您尝试使用 JS 读取内容,因此需要。

您不能使用重定向为您无法控制的资源授予 CORS 权限。如果可以,那么攻击者可以(例如)创建一个重定向到您的网上银行的站点,然后让他们攻击站点上的 JS 通过它访问您的帐户。这将使同源政策一文不值。

【讨论】:

  • 我正在使用 amp(加速移动页面)登录。它要求我成功重定向到/login.html#success=true。与#success=truesuccess=false 基本相同的页面。同样在注销时,我应该重定向到相同的 url 并以某种方式刷新页面,这样用户名和其他信息就会消失。他们在官方文档和启用了 cors 的工作示例中使用 expressjs 进行了重定向。为什么我做不到?
  • 你不能用 Ajax 做到这一点。可能它打算让您使用常规的表单提交。
  • official running example on herokusource code from official repo 你可以自己看看。因为它使用不同/旧框架是可能的。我想在 lambda 函数中复制它并根据原始 url 抛出 401 状态代码。但它不允许我这样做。
  • 看一下,授权端点响应带有 JSON 或纯文本,但不是重定向。
  • 您正在查看错误的端点。 /controllers/amp-access/login.js/submit 用于登录的 post 端点,/logout 有用于注销的端点。
猜你喜欢
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2013-04-18
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2023-03-05
相关资源
最近更新 更多