Я использую пакет JWT (jsonwebtoken) с узлом для обработки токенов.

Есть ли способ «выйти из системы» / отозвать / аннулировать токен?

5
mosquito87 5 Мар 2015 в 13:27

3 ответа

Лучший ответ

С аутентификацией jwt нет необходимости вставлять токен в базу данных, если вы хотите отозвать / выйти / аннулировать токен, просто удалите его локально в браузере там, где вы решили его сохранить (файл cookie или заголовок), в этом case при следующем вызове любого маршрута (защищенного аутентификацией) сервер, если у него есть хороший программист, должен снова запросить аутентификацию.

Надеюсь на эту помощь, чао.

0
Massimiliano 28 Окт 2015 в 23:58

Мне нравится, что у этого была эта проблема, я решил это так: сначала я создаю сеанс модели для db, например:

var SessionSchema = new Schema({
    user_id:   { type: String, required: true },
    tokenHash: { type: String, required: true }
});

После создания токена я сохраняю сеанс, когда пользователь что-то делает в моем промежуточном ПО "checkSession", я ищу токен в db, если он существует, я проверяю его, если он не существует, отправьте auth_error, если токен существует в db, но просрочен, я удаляю его из db и отправить auth_error, если я удалю или заблокирую пользователя, я удаляю сеанс из базы данных.

Попробуйте, может это вам поможет.

-1
siavolt 5 Мар 2015 в 11:46

Если вы просто хотите вывести текущего пользователя из системы, как сказал @Massimiliano, это часто реализуется путем удаления токена из любого клиентского хранилища, которое вы использовали для его отслеживания (например, файлы cookie).

Если вам нужен отзыв по соображениям безопасности, вот статья, в которой рассказывается о том, почему вы, возможно, не захотите использовать JWT в первую очередь, а вместо этого используйте обычные непрозрачные токены-носители (реализованные путем их хранения в базе данных, часто с использованием безопасных случайных строка в качестве их идентификатора).

https://www.dinochiesa.net/?p=1388

По сути, их нельзя отозвать без добавления поиска в базе данных (что отрицает одну из основных причин использовать JWT для начала). А в случае необходимости отзыва через пользовательский интерфейс вы захотите иметь возможность запрашивать токены с помощью user_id или group_id или аналогичного средства, поэтому вы захотите иметь возможность индексировать токены по этой информации вместо того, чтобы она была непрозрачной в утверждениях JWT.

1
Ian Storm Taylor 14 Мар 2016 в 22:10