Как получить секретный ключ из зашифрованного токена? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть приложение узла js. Мне нужно получить секретный ключ из сгенерированного токена для использования моего метода индивидуальной проверки. Есть ли какой-нибудь метод токена декодирования или отрыв секретного ключа от метода токена для 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);

РЕДАКТИРОВАТЬ: Я узнал, что в JavaScript нет функции, которая может декодировать секретный ключ токена. Секретный ключ создается с помощью специальных алгоритмов.

1 Ответ

0 голосов
/ 03 ноября 2019

Вы не можете получить секретный ключ из зашифрованного токена, потому что в противном случае каждый может создать действительные токены для вашего приложения. Вы должны сохранить секрет на локальном сервере и никогда не раскрывать его. Затем, когда вы вызываете метод jwt.verify, вы должны передать секрет вместо req.headers.user

...