JSON Web Token Header Security - NODE JS - PullRequest
0 голосов
/ 01 ноября 2019

Я хотел бы реализовать авторизацию на основе JWT для нашего нового REST API. Обычно, когда вы используете JWT, вы указываете секретный ключ в своей программе. JWT кодирует это и создает токен. Но я хотел создать уникальный токен для каждого пользователя. Для этого я использую электронную почту пользователя в качестве секретного ключа при создании токена. И я использую это письмо в разделе заголовка тоже с токеном для проверки. Я использую 2 заголовка для проверки. Одним из них является ключ авторизации со значением токена, а другим - ключ пользователя со значением электронной почты. Но это не так безопасно.

Если я получу JWT и смогу декодировать полезную нагрузку, насколько это безопасно? Разве я не могу просто извлечь токен и электронное письмо из заголовка, декодировать информацию о пользователе в полезной нагрузке и добраться до моих маршрутов с тем же правильным закодированным секретом?

Вот моя часть создания токена в разделе Код логина: (Если пароль верен:)

 const secretKey= user.email;
 const token = jwt.sign({
        email:user.email,
        password: user.password

    }, 
    secretKey,
    {
        expiresIn :"2h"
    }
    )
    return res.status(200).send({ message: 'success', token: token});

А затем в промежуточном программном обеспечении я использую этот код:

const jwt = require('jsonwebtoken');

module.exports = (req, res, next) => {
try {

const token = req.headers.authorization.split(" ")[1];
const decodedToken = jwt.verify(token, req.headers.user);
req.userData = decodedToken;
next();
}catch(error) {
return res.status(401).send({
    message: 'Auth failed'
});
}

И мой app.js:

 const checkAuth = require('../middleware/checkauth');
 router.get('/api/company',checkAuth,companyController.list);

Как вы видите в промежуточном программном обеспечении, я использую раздел заголовка с ключом пользователя и значением электронной почты. Я проверяю это почтальоном и пишу ключ авторизации со значением токена и ключ пользователя со значением электронной почты. Если токен содержит секретный ключ, это означает, что он имеет электронную почту в соответствии с моим кодом. Но я не хочу использовать электронную почту в разделе заголовка. Может быть, я могу взять этот токен, расшифровать и достучаться до электронной почты. Таким образом, мне не нужно использовать электронную почту в разделе заголовка. Или я могу использовать это письмо в зашифрованном виде в заголовке с открытым / частным шифрованием, но я не знаю, как это сделать. Любое предложение ?

...