Некоторые основные вопросы о JWT (на стороне сервера и клиента)

0

Я использую express.js, паспорт с jwt-стратегией и, конечно, jsonwebtoken для node.js.

Итак, в настоящее время мне удалось реализовать логику на стороне сервера, которая позволяет пользователям входить в систему и возвращать токен jwt.

После этого, когда я получаю запрос с соответствующим токеном в заголовке, он корректно проверяет токен jwt и отображает информацию. Код выглядит следующим образом:

var jwt = require('jsonwebtoken');

function createToken(user) {
    return jwt.sign(user, 'shhhhh', {
            issuer: "accounts.examplesoft.com"
        });
}

var opts = {};
opts.secretOrKey = 'shhhhh';
opts.issuer = "accounts.examplesoft.com";

passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    console.log(jwt_payload);
    User.findById(jwt_payload.id, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            done(null, user);
        } else {
            done(null, false);
        }
    });
}));

app.post('/jwt_login', function(req, res) {
    User._loginJwt({
        email: req.body.email,
        password: req.body.password
    }, function(err, user) {
        if (err) res.json(err);
        else res.json(createToken(user));
    });

});

app.get('/jwt_test', passport.authenticate('jwt', {
    session: false
}), function(req, res) {
    res.json(true);
});

Теперь я пытаюсь сделать клиентскую страницу. Я использую angularjs, и есть много jwt-библиотек для angularjs или, скорее, клиентской стороны в целом. Теперь у меня есть ряд вопросов:

  1. Прежде всего, правильно ли реализована реализация на стороне сервера (из чего вы можете сказать по коду выше)?
  2. Безопасно ли хранить токен jwt в localStorage (на стороне клиента)?
  3. Почему так много библиотек доступно для клиентской стороны jwt? Не достаточно ли получить токен, а затем вызвать запросы с помощью этого токена? Что еще я мог сделать с этим токеном на стороне клиента?
  4. Не может ли кто-то просто скопировать токен jwt из localStorage и сделать запросы, как если бы они вошли в систему? Разве это не проблема безопасности?

Спасибо за ваши ответы!

Теги:
express
jwt
passport.js

1 ответ

2
Лучший ответ
  1. Реализация серверной стороны выглядит отлично, хотя заявки в токене могут быть расширены. Просто всегда удостоверяйте токен, и вы хороши.
  2. Да. Эта часть того, почему JWT полезна. Если пользователь изменяет токен, он не будет соответствовать его сигнатуре и не будет проверять подлинность.
  3. Из того, что я помню, клиентская сторона предназначена для передачи данных в полезной нагрузке, которая используется на клиенте. Вы хотите иметь возможность аутентифицировать токен на той стороне, а затем, поэтому ваш front-end не делает ничего, что он не должен.
    а. Если у вас просто есть RESTful API, который проверяет запросы с токеном, вам не нужно ничего делать с JWT на интерфейсе, кроме отправки его с запросами.
  4. Да. Вот почему ваш токен должен включать истечение срока в его требованиях. Имейте в виду, что единственный способ попасть в LocalStorage - это если они вошли в систему для начала.

См. Здесь претензии, которые могут быть в вашем токене:

http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#rfc.section.4

  • 0
    Спасибо за быстрый ответ. Просто вопрос, какие претензии могут быть добавлены к токену на ваш взгляд? Кроме того, как было сказано: «Имейте в виду, что единственный способ попасть в LocalStorage - это войти в систему с самого начала». - пользователь всегда может вручную изменить localStorage, поэтому я бы не стал слишком полагаться на него.
  • 0
    Ну, вы всегда должны устанавливать exp чтобы убедиться, что токен истекает. Я обычно добавляю свои собственные утверждения, такие как uid для проверки соответствия токена пользователю, которому я его назначил. Смотрите # 2 о том, почему это не имеет большого значения, если пользователь портит JWT.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню