具有许多客户端的API的CORS标头

时间:2019-01-21 12:25:21

标签: cors

最近几个小时,我已经阅读了很多有关CORS的文章,但我的理解仍然缺少一些核心内容。

假设我正在编写一个API,客户端可以在自己的前端(当然,它们可以在其他主机上运行)中使用。

您的API端点应实际返回哪个access-control-allow-origin标头?

通配符*将允许所有前端实际调用我的API,但这包括黑客站点,这些站点现在可以在后台发出经过身份验证的请求。

我能想象的唯一方法是,我的服务器上有一个白名单,其中包含所有允许的客户端主机,并且如果收到请求,则检查主机是否在该列表中,然后返回access-control-allow-origin: <that-matched-host>。但这听起来很麻烦。我猜想,对于真正的大型API来说,它真的不起作用。

还是要在这里学习的教训是我们不应该使用Cookie进行身份验证?

致谢

1 个答案:

答案 0 :(得分:0)

根据spec,您不能拥有Cookie和Access-Control-Allow-Origin: *

  

字符串“ *”不能用于支持以下内容的资源   凭据。

如您所写,您可以将其列入白名单,也可以将其列入更好名单-避免使用Cookie进行身份验证。 可以通过向客户端提供一些令牌来执行身份验证,该令牌将在后续请求中使用它。

此外,某些API没有任何特定于用户的信息,也没有身份验证。在这种情况下,Access-Control-Allow-Origin: *可以容纳。