Что ж, этот вопрос может быть наивен, поскольку я впервые внедряю 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 для проверки и если я отправляю его без поля темы в теле (токен выдается с подполем), токен проверяется успешно. Но если я отправлю поле темы в теле с правильным/неправильным значением, оно получит успех/запрет соответственно.
- Почему так происходит?
- Почему токен не запрещается, если в запросе не передается подполе?
- Нужно ли мне подтверждать это вручную?