Nodejs Cors позволяют все источники для определенных маршрутов - PullRequest
0 голосов
/ 18 марта 2020

У меня есть Node.js бэкэнд, использующий express, который разрешает только запросы, поступающие из указанного c источника (назовем его localhost:8998). Я хотел бы создать API-интерфейс publi c для бэкэнда, однако авторизованный с помощью токена, а не источника.

Возможно ли даже создавать такие маршруты?

Я думал об этом, установив заголовок Access-Control-Allow-Origin в любое место происхождения запроса, когда маршрут запроса является одним из опубликованных c маршрутов API. Примерно так:

app.use(function(req, res, next) {
    var origin = req.get('origin');
    res.header("Access-Control-Allow-Origin", origin);
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

Похоже, я иду против первоначальных намерений заголовка Access-Control-Allow-Origin. Хотелось услышать мысли ваших парней об этом / как я должен go о реализации API * publi c.

1 Ответ

1 голос
/ 18 марта 2020

Создайте промежуточное ПО:

const allowCORS = function(req, res, next) {
    var origin = req.get('origin');
    res.header("Access-Control-Allow-Origin", origin);
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
};

const allowAllIfAuthorized = function(req, res, next) {
  if (req.isAuthorized) {
    return allowAll(req, res, next);
  } 
  next();
};

const allowedTokens = [...];
const isAuthorized = function(req, res, next) {
  req.isAuthorized = (
    req.query.accessToken 
    && allowedTokens.includes(req.query.accessToken)
  );
  next();
}

и присоедините его по определенным маршрутам:

app.get('/', (req, res) => res.render('index'));

app.use(
  '/api', 
  allowCORS, // allow cors for public api
  require('./api'));

app.use(
  '/private/api', 
  isAuthorized, allowCORSIfAuthorized, // allow cors if user authorized
  require('./private/api'));

Я бы хотел создать API Publi c для серверной части, однако , авторизованный с помощью токена, а не по источнику.

, поэтому везде должно быть правило всех правил. Вы запрещаете частный доступ, используя токены доступа, которые будут иметь авторизованные пользователи.

Сводка : CORS не является брандмауэром (привратником) от неавторизованных пользователей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...