Pull to refresh

Comments 5

После строки

'ACCESS_TOKEN_LIFETIME': timedelta(days=30)

читать перестал.

поддерживаю. А я после сохранения accesstoken в localstorage.

Автор, @VlassaDasse, по коду получается, я не могу разлогиниться без токена? Как то это неправильно.

А вдруг я, как, админ, хочу сделать revoke_all_tocken_by_user? Как это работает?

Код вьюхи залогинивания уже есть в Django, зачем писать еще раз?

Если поставить защиту @permission_classes([IsAuthenticated]) на def profile(request, user_id) Методом перебора я могу получить профили всех пользователей. Я ж авторизован. Не надо так.

Ну и последнее. Зачем в данной реализации JWT, если django предоставляет auth by session? Ответ есть на хабре, и точно не в твою пользу :(

Также Refresh желательно прятать куда-нибудь поглубже, а не просто в localStorage

А в итоге показанный пример использует просто localStorage. Злоумышленник, добравшийся до какого-нибудь XSS, просто утянет оба токена

И стандартная сессия Django получается безопаснее в том числе в этом плане, потому что через JS сессионную HttpOnly-куку прочитать не получится

Злоумышленник, добравшийся до какого-нибудь XSS

Но если прятать его в HttplOnly-куку, получается, что токен теперь уязвим и для CSRF, и для XSS. И пряча токен в localStorage остаётся лишь уязвимость XSS. Получается из двух зол, лучше выбрать localStorage. Как считаете?

Как я уже написал, HttpOnly-куку прочитать не получится, поэтому украсть refresh-токен через XSS не получится (только временно попользоваться в рамках доступности XSS). И CSRF для refresh-токена, кажется, тоже неприменим: даже если злоумышленник сможет каким-то образом отправить refresh-запрос со стороннего сайта, прочитать ответ с присланным access-токеном он не сможет уже никак — браузер не даст доступ, если вы сами не налажаете в настройках CORS

Sign up to leave a comment.

Articles