Выйти Django Rest Framework JWT - PullRequest
       69

Выйти Django Rest Framework JWT

0 голосов
/ 20 сентября 2018

Я хочу спросить, хорошо ли выходить из системы, когда я использую JWT.Для входа в систему я отправляю почтовый запрос с именем пользователя и паролем, чтобы получить желаемый токен (сохраненный в localStorage), который позволит мне отправлять дополнительные запросы в представления, для которых, конечно, требуется токен.

Но я 'Я не уверен, как мне выйти из системы.Я могу очистить localStorage, но токен остается доступным.

Итак, я хочу спросить, нужно ли мне использовать обновить токен , поскольку я не могу его отключить.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

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

class BlackListedToken(models.Model):
    token = models.CharField(max_length=500)
    user = models.ForeignKey(User, related_name="token_user", on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now=True)

    class Meta:
        unique_together = ("token", "user")


class IsTokenValid(BasePermission):
    def has_permission(self, request, view):
        user_id = request.user.id            
        is_allowed_user = True
        token = request.auth.decode("utf-8")
        try:
            is_blackListed = BlackListedToken.objects.get(user=user_id, token=token)
            if is_blackListed:
                is_allowed_user = False
        except BlackListedToken.DoesNotExist:
            is_allowed_user = True
        return is_allowed_user

Вы можете удалить токен из черного списка после истечения срока его действия.

0 голосов
/ 22 декабря 2018

Вы не можете вручную истечь токен после того, как он был создан.Таким образом, вы не можете фактически выйти из JWT на стороне сервера, как вы делаете с сеансами.

JWT не имеет состояния, что означает, что вы должны хранить все, что вам нужно, в полезной нагрузке и пропускать выполнение запросов БД для каждого запроса.Но если вы планируете иметь строгую функциональность выхода из системы, которая не может ожидать автоматического истечения срока действия токена, даже если вы очистили токен со стороны клиента, вам может понадобиться пренебречь логикой без сохранения состояния и выполнить некоторые запросы.так в чем же решение?

  • Установить разумное время истечения срока действия для токенов

  • Удалить сохраненный токен со стороны клиента при выходе из системы

  • Запрос выдан токен против Черный список на каждый авторизованный запрос

Черный список

«Черный список» всехтокены, которые больше не действительны и еще не истек.Вы можете использовать БД с опцией TTL для документов, для которой будет задано время, оставшееся до истечения срока действия токена.

Redis

Redis - хороший вариант для черный список, что позволит быстро в памяти получить доступ к списку.Затем в некотором промежуточном программном обеспечении, которое запускается при каждом авторизованном запросе, вы должны проверить, находится ли предоставленный токен в черном списке .Если это так, вы должны выдать несанкционированную ошибку.А если это не так, отпустите его, и проверка JWT обработает его и определит, истек ли он или все еще активен.

0 голосов
/ 20 сентября 2018

Каждый JWT, который вы выпускаете, должен иметь дату истечения срока действия, поэтому всякий раз, когда вы выходите из системы, вы должны удалить jwt-токен из файла cookie localalstorage.

, но токен остается доступным.

Не уверен, что означает указанная выше строка, но вам не следует беспокоиться о том, останется ли токен доступным для пользователя или нет после того, как вы удалите его из localstorage и cookie, потому что в любом случае он станет недействительным после истечения срока действия.

...