Что ж, этот вопрос может быть наивным, так как я впервые внедряю JWT в свое приложение для узлов, и у меня слишком много вопросов по этому поводу.
Во-первых, мне не ясны претензии iss
, sub
и aud
. Из моего базового понимания я понимаю, что iss
является эмитентом токена, поэтому я могу предположить, что это название компании приложения. sub
является предметом токена или, проще говоря, идентификатором пользователя / именем пользователя. И, наконец, aud
предназначен для аудитории или, проще говоря, для URL-адреса сервера / сервера ресурсов API. Пожалуйста, дайте мне знать, если я правильно понял эти условия.
Теперь, благодаря моим ограниченным знаниям, я настроил базовую подпись и проверку JWT. Небольшой фрагмент выглядит следующим образом:
JWT.js
module.exports = {
sign: (payload, options) => {
let signOptions = {
issuer: config.JWT_ISSUER,
subject: options.subject,
audience: config.JWT_AUDIENCE,
expiresIn: "24h",
};
return jwt.sign(payload, config.JWT_SECRET, signOptions);
},
verify: (token, options) => {
let verifyOptions = {
issuer: config.JWT_ISSUER,
subject: options.subject,
audience: config.JWT_AUDIENCE,
expiresIn: "24h",
};
try {
return jwt.verify(token, config.JWT_SECRET, verifyOptions);
}
catch (err){
return false;
}
},
Теперь токен выдается следующим образом:
// Issue JWT token
let userData = {
user_name: user.userName,
client_id: user.clientId
};
const token = jwt.sign({ userData }, { subject: user.userName });
Проверка выполняется следующим образом:
// Verify the token
const authData = jwt.verify(token, { subject: req.body.subject });
ОСНОВНОЙ ВЫПУСК
Когда я отправляю запрос в конечную точку API для проверки и если я отправляю его без поля темы в теле (, токен выдается с подполем ), токен успешно подтвержден Но если я отправлю поле темы в теле с правильным / неправильным значением, оно получит успех / запрет соответственно.
- Почему так происходит?
- Почему токен не запрещен, если в запросе не указано подполя?
- Нужно ли проверять это вручную?