JWT-аутентификация для веб-приложений - Spring Security
Вставка
- Опубліковано 6 лип 2023
- В отличие от нативных приложений, веб-приложения самостоятельно не могут сохранять аутентификационные данные в безопасном месте, следовательно, продемонстрированный в предыдущем ролике способ получения ключей доступа не актуален для веб-приложений.
В случае с последними аутентификационные данные правильнее всего хранить в HTTP-куках, доступ к которым имеет только серверная сторона.
В этом ролике я продемонстрирую реализацию сохранения куки с JWT-токеном и дальнейшую аутентификацию при её помощи.
Репозиторий проекта: github.com/alex-kosarev/sprin...
#java #jwt #springsecurity
Мой сайт: alexkosarev.name/
Паблик в VK: public218833461
Канал в Telegram: t.me/+TZCuO38vG3oqu_Jq
Стать доном: donut/shurik.codes
Донаты в Boosty: boosty.to/akosarev/purchase/1...
Донаты в Tinkoff: www.tinkoff.ru/cf/4PEOiVCZQuS
Приятно смотреть как работает профессионал. В каждом видео нахожу для себя интересные подходы к решению задач.
Кладезь знаний, актуальные видео по спрингу! лайк, подписка. Спасибо!
Спасибо за видео, всегда очень интересно и понятно
В детстве ждал Диснея по воскресеньям,в отрочестве Денди новую реальность и "От винта!",в юности акул пера или вручений премии Муз-тв,вырос,возмужал но жду Саниных видео как ребенок Диснея. Спасибо за видос,все как всегда четко и по существу. Огромный респект и сердечное пожелание процветания каналу и автору.
Спасибо за тёплые слова)
Спасибо за великолепные ролики! Сделал опираясь на них гибрид для single page web-приложения, где refresh-токен хранится в куке, а access токен в памяти приложения. При этом обновляются одновременно и refresh-кука, и access-кука, дабы refresh не исчезала через отведенное время.
ну талант рассказчика на лицо, джаву не учу, но заинтересовало.
Большое спасибо за видео, объяснениe на высоком уровне
Так у меня всё свалено в sandbox
@@shurik_codes но там же нет классов, связанных с cookies, только access/refresh tokens. Было бы удобно, если бы выложили и cookie-authentication модуль.
@@shurik_codes а, там по дефолту стоит не та ветка, поэтому не был виден этот модуль.
Спасибо за инфу, удалил main@@user-sj6hl1ye4r
Спасибо за полезное видео! Вопрос как настроить ssl для этого примера, или как отключить его в данном проекте?
Для настройки SSL в application.yml есть параметры spring.server.ssl..., чтобы отключить SSL достаточно их удалить
У меня есть пару вопросов, сейчас сам начал делать регистрацию и как у меня происходит при авторизации,я создаю два токена refresh и access, но храню я в куки только храню только accesToken и, а Refresh в базе данных, но сам Refresh Token не хранит полезной информации на основании, которой можно создать accesToken правильный ли это подход? И мне интересно можете ли посоветовать книгу по самим паттернам, потому что явно можно увидеть, что все ваши ролики создаются с использованием паттернов.
Спасибо за видео, было полезным.
Есть вопрос: а как сделать так чтобы на статику авторизация не проверялась (чтобы фильтр не ломился в базу по каждому запросу)?
Например такое указание все равно не помогает .requestMatchers("/**").permitAll()
Этого можно достичь настройками параметров запросов, которые должны обрабатываться цепочкой фильтров безопасности, делается это методом securityMatcher. Например, если не хочется, чтобы цепочка фильтров безопасности реагировала на запросы на получение файлов из пути /js, то это можно сделать следующим образом:
http.securityMatcher(new NegatedRequestMatcher(new AntPathRequestMatcher("/js/**")))
Правила фильтрации можно комбинировать при помощи AndRequestMatcher, OrRequestMatcher и т.д.
Второй вариант - позволить цепочке фильтров обрабатывать только запросы к какому-то конкретному подпути:
http.securityMatcher(new AntPathRequestMatcher("/api/**"))
.requestMatchers("/**").permitAll() - это правила авторизации, цепочка фильтров безопасности всё равно обрабатывает эти запросы.
Cпасибо, очень хорошее видео....
Однако, не могу понять, если СSRF-токен хранится также в cookie, то при CSRF-атаке обе cookie(JWT и СSRF-токен) отправятся на сервер, где они корректно обработаются и запрос будет выполнен
Про CSRF: ua-cam.com/video/LtvS0F04C2c/v-deo.html
Но вообще SameSite=Strict + CORS
Спасибо
Очень хорошее видео@@shurik_codes
Спасибо за видео, но если кука живёт один день, получается пользователю придётся каждые 24 часа производить процедуру входа? Звучит не слишком приятно для пользователя. Единственное, что придумал, чтобы обойти этот момент, это сделать куку с токеном с неограниченным сроком жизни. В связи с этим вопрос. Можно ли сделать более элегантно?
Ну так я сутки сделал в качестве примера, можно больше сделать
Как добавить csrf токен для POST,UPDATE,DELETE запросов? Можете подсказать где посмотреть материал для реализации другого handler'a?
Если честно, то я не понял вопроса, подробно CSRF я разбирал в этой статье: alexkosarev.name/2023/07/15/spring-security-csrf/ и ролике ua-cam.com/video/LtvS0F04C2c/v-deo.html
Так, а что ты свое изображение в нижнюю правую часть экрана не перетащишь? Кажется там меньше суеты происходит, чем справа вверху
Ну и вопрос, КК и Oauth2 будут? Я смотрел конец и надеюсь ты выберешь верный вариант)
снизу всякие логи выводятся)
будет
А зачем нужно использовать CSRF при JWT Аутентификации? я думал CSRF атаки возможны только при сессионной аутентификации
Дело не в использовании HTTP-сессий, а в использовании файлов куки для хранения сессионной информации, как это сделано в этом ролике - JWT хранится в куке и, более того, по факту представляет собой HTTP-сессию.
CSRF-атаки возможны при использовании файлов куки для хранения сессионных данных, варианты атак я описывал в этой статье: alexkosarev.name/2023/07/15/spring-security-csrf/ и ролике ua-cam.com/video/LtvS0F04C2c/v-deo.html
А как у вас удаляются заблокированные просроченные токены из БД, чтобы они не скапливались?
Это несложно реализовать при помощи заданий по расписанию (@Scheduled)