Cusrf без cookie и сеанса для API-приложения узла API

Я пытаюсь настроить модуль узла csurf для API, который не использует файлы cookie и сеанс, но имеет аутентификацию токена-носителя.

Ниже приведен код, который я пробовал. Когда я запускаю приведенный ниже код и получаю следующую ошибку

Error: misconfigured csrf
    at csrf (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/csurf/index.js:71:19)
    at Layer.handle [as handle_request] (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/index.js:317:13)
    at /Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/middleware/init.js:40:5)
    at Layer.handle [as handle_request] (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/index.js:317:13)
    at /Users/saravanan/Documents/Development/nodejs/csurf-demo-1/node_modules/express/lib/router/index.js:284:7

** Фрагмент кода **

var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')


var parseForm = bodyParser.urlencoded({ extended: false })

// create express app
var app = express();

app.use(csrf());

// parse cookies
// we need this because "cookie" is true in csrfProtection


app.get('/form', function (req, res) {
  // pass the csrfToken to the view
  res.render('send', { csrfToken: req.csrfToken() })
})

app.post('/process', parseForm, function (req, res) {
  res.send('data is being processed')
});

var PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.info(`Listening on http://localhost:${PORT}`);
}); 

Когда я пытаюсь использовать приведенный ниже код, который ищет заголовок для проверки токена, я получаю сообщение об ошибке, поскольку не могу прочитать сеанс undefined.

var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')

// setup route middlewares
var csrfProtection = csrf({
    value: (req) => {
        var csrfToken = req.body._csrf || req.headers["x-csrf-token"];
        return csrfToken;
    },
    cookie: false
})
var parseForm = bodyParser.urlencoded({ extended: false })

// create express app
var app = express();

app.use(csrfProtection());

app.get('/form', function (req, res) {
  // pass the csrfToken to the view
  // res.sendStatus(200);
  res.render('send', { csrfToken: req.csrfToken() })
})

app.post('/process', parseForm, function (req, res) {
  res.send('data is being processed')
});

var PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.info(`Listening on http://localhost:${PORT}`);
}); 

Как можно защитить API с помощью токена аутентификации или токенов csrf?

Эй, приятель, ты нашел решение?

1nstinct 27.01.2021 20:38

@1nstinct, извините, проект закрыли и я не смог работать в приложении/изменениях

Saran 28.01.2021 06:07

Я думаю, что jwt-csrf - это то, что вы искали. В любом случае удачи в новом проекте

1nstinct 28.01.2021 18:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
585
2

Ответы 2

пожалуйста, проверьте:
Вызов app.use(csrf()) должен быть установлен после app.use(cookieParser()) И app.use(session({...}).

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

Saran 30.01.2019 14:52
csrfТребует, чтобы сначала было инициализировано промежуточное программное обеспечение сеанса или анализатор файлов cookie. проверьте : [ npmjs.com/package/csurf ]
Shubham Tiwari 30.01.2019 15:06

Я попал в такую ​​же беду. У меня нет ни сеанса, ни файлов cookie, а токены JWT. Сейчас я собираюсь реализовать защиту от CSRF с помощью модуля jwt-csrf. Я думаю, что это полностью соответствует моим потребностям и потребностям топикстартера.

Другие вопросы по теме