JWT черный список токенов - PullRequest
       9

JWT черный список токенов

0 голосов
/ 29 августа 2018

Я создаю аутентификацию с JWT, и все настроено, кроме черного списка. Я пытался найти правильный способ сделать это, но я потерян. Вот как выглядит мой паспортный код на данный момент. У меня есть пара идей о том, как это сделать, но ни один из них не является оптимальным. Поэтому, если кто-нибудь знает, существует ли стандартный способ внесения в черный список, я был бы очень признателен за помощь.

1) Я использую «jit», который есть у каждого JWT, и сохраняет его в БД при выходе из системы. Я не могу найти способ добавить jit в полезную нагрузку токенов при создании токена, и поэтому не могу его использовать.

2) Я создаю свой собственный идентификатор для токена и помещаю его в полезную нагрузку. Это своего рода метод последней инстанции, поскольку он не оптимален.

Функция выхода из системы, где хранится идентификатор:

function logout() {
  return tryCatcher(function(req, res, next) {
    if (req.cookies.jwt) {
      var newEntry = {
        token: req.cookies.jwt
      }
      res.clearCookie("jwt");
      models.blacklist.create(newEntry);
      res.status(201).json({message: 'the logout was successfull'});
    }
  });
}

passportStrategy:

const is_jwt_blacklisted = function(token) {
  models.blacklist
    .findOne({where: {token: token}})
    .then(function(blacklistToken) {
      if (blacklistToken) {
        return false; 
      } else {
        return true; 
      }
    });
}

const cookieExtractor = function(req) {
  let token = null;
  if (req && req.cookies)
    {
      token = req.cookies['jwt'];
    }
    return token;
};

passport.use(new JwtStrategy({
  jwtFromRequest: cookieExtractor,
  secretOrKey: config.keys.secret
}, async(payload, done) => {
  try {    
    models.user.findById(payload.userId)
    .then(function(user) {
        if (!user) {
          return done(null, false);
        }
        done(null, user);
     })
  } catch (error) {
    done(error, false)
  }
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...