Претензия JWT игнорируется при проверке - PullRequest
1 голос
/ 29 марта 2019

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

  • Почему так происходит?
  • Почему токен не запрещен, если в запросе не указано подполя?
  • Нужно ли проверять это вручную?

1 Ответ

0 голосов
/ 29 марта 2019

Согласно стандарту JWT ,

4.1.2.Претензия "sub" (субъект)

Претензия "sub" (субъект) идентифицирует принципала, являющегося предметом JWT.Претензии в JWT обычно являются заявлениями по этому вопросу.Значение субъекта ДОЛЖНО либо быть ограничено областью, чтобы быть локально уникальным в контексте эмитента, либо быть глобально уникальным.Обработка этого требования обычно зависит от приложения.Значение «sub» является чувствительной к регистру строкой, содержащей значение StringOrURI.Использование этого утверждения НЕОБЯЗАТЕЛЬНО.

Таким образом, если у вас его нет, оно проходит, но неверное значение приводит к сбою.Пакет jwt соответствует стандарту.

Теперь, если вы планируете сделать его обязательным, вам придется настроить его, но будьте предупреждены, что вы не сможете использовать стороннюю аутентификацию (если это вашаслучай), которые не считают это обязательным.(Я не знаю, так ли это в реальной жизни)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...