本文介绍了我可以设置仅允许特定来源传递Cookie(Node.js)的动态cors策略吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

上下文

我有一个带有两种类型客户的快递服务器。

I have an express server with two types of clients.


  1. 我的应用程序(React + graphql):我已为此客户端启用凭据: app.use(cors({凭据:true,来源: http :// localhost:3000})); 我已对此进行了设置,以便可以从我的gql客户端接收与身份验证相关的cookie。

  1. My app (React + graphql): I've enabled credentials for this client: app.use(cors({ credentials: true, origin: "http://localhost:3000" })); I've set this so that I can receive auth-related cookies from my gql client.

第三方服务(通过我提供的http客户端)。这些请求可以来自任意多个来源。

Third-party services (via http client I provide). These requests can come from any number of origins.

我不能对原点使用通配符( cors({origin:*})),因为这将允许任何站点使用我的用户的身份验证cookie。但是,如果我不通过通配符运算符,则第三方客户端将无法发出请求。

I can't use the wildcard operator for the orgin (cors({origin: *})) as this would allow any site to use my users' auth cookies. However, if I don't pass the wildcard operator, third-party clients can't make requests.

我尝试在特定路由上启用通配符未成功。

I've tried unsuccessfully to enable the wildcard on a specific route.

问题

我可以为不同来源设置不同的cors政策吗?

Can I set different cors policies for different origins?

推荐答案

您有几种选择。


  1. 您可以设置一个动态的cors处理程序,无需使用*就可以允许原点。

  2. 您可以从cookie中获取所需的任何内容,并将其以其他方式传递(作为查询)例如,

您可以编写程序控制的cors处理程序,该处理程序可以允许一个域,某些域,所有域

You can write a programmatically controlled cors handler that can allow one domain, some domains, all domains, however you write the code.

这里是一个允许所有域不使用*的代码:

Here's one that allows all domains without using *:

var corsOptions = {
  origin: function (origin, callback) {
    console.log(`Origin ${origin} is being granted CORS access`);
    callback(null, true)
  }
}

app.use(cors(corsOptions));

您也不必在全球范围内应用。您只能将其应用于某些路由或仅应用于某些路由器。

You don't have to apply this globally either. You can apply it only to certain routes or only to certain routers.

此处的示例:(在CORS模块文档中)。

Examples here: https://www.npmjs.com/package/cors in the CORS module documentation.

这篇关于我可以设置仅允许特定来源传递Cookie(Node.js)的动态cors策略吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 22:46