Я пытаюсь настроить модуль узла 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, извините, проект закрыли и я не смог работать в приложении/изменениях
Я думаю, что jwt-csrf - это то, что вы искали. В любом случае удачи в новом проекте



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


пожалуйста, проверьте:
Вызов app.use(csrf()) должен быть установлен после app.use(cookieParser()) И app.use(session({...}).
Я не хочу использовать ни один из них, ни куки, ни сеанс. Пожалуйста, обратитесь к фрагменту кода в сообщении, в котором нет ни одного из этих промежуточных программ.
Я попал в такую же беду. У меня нет ни сеанса, ни файлов cookie, а токены JWT. Сейчас я собираюсь реализовать защиту от CSRF с помощью модуля jwt-csrf. Я думаю, что это полностью соответствует моим потребностям и потребностям топикстартера.
Эй, приятель, ты нашел решение?