Аутентификация - Spring Security в деталях
В этом ролике я рассказываю о компонентах и реализации аутентификации в Spring Security.
00:00 Вступление
01:45 Приземляется Ил-76ТД
02:44 Идентификация, аутентификация и авторизация
06:15 Интеграция Spring Security
08:36 Basic-аутентификация
16:24 Basic-аутентификация в Spring Security
20:26 Аутентификация при помощи формы
29:44 Аутентификация при помощи формы в Spring Security
32:00 Компоненты аутентификации в Spring Security
54:16 Реализация Basic-аутентификации в Spring Security
1:01:48 О точках входа
В серии роликов "Spring Security в деталях" я рассказываю о внутреннем устройстве Spring Security и его использовании для обеспечения безопасности веб-приложений.
Мой сайт: alexkosarev.name/
Паблик в VK: public218833461
Канал в Telegram:t.me/+TZCuO38vG3oqu_Jq
Стать доном: donut/shurik.codes
Донаты в Boosty: boosty.to/akosarev/purchase/1...
Донаты в Tinkoff: www.tinkoff.ru/cf/4PEOiVCZQuS
#java #springsecurity #authentication #basic #form
Пікірлер: 79
Как же мне повезло что я вовремя нашел ваш канал, лучший канал про джаву и программирование в целом
Когда я увидел, что у тебя даже визуализация написана через код, я прифегел конечно😂 сразу видно хорошего программиста
@shurik_codes
3 ай бұрын
Скорее ленивого) Мне проще накидать схему в PlantUML, чем где-то нарисовать)
@mpchest1
2 ай бұрын
@@shurik_codes прикольный плагинчик, надо будет затестить
Как мне раньше этого твиде не хватало спасибо хорошая работа.
Бро привет, слушай в начале этого ролика ты говорил что ты не умеешь вести долгие и интересные ролики, слушай я с тобой в корни не согласен так как ты очень умный и крутой чувак который понял как это работает и это круто, у тебя абалденно получается преподносить людям инфу такой какая она есть, я сам являюсь джавистом и скажу честно не каждый как говориться так сможет))) по этому я честно надеюсь что ты прочтешь мой коммент из тысячи других и запишеш длинный видос по хотя бы разбору одной темы из секьюрити)). Давай бро делай дальше в том же духе )) не останавливайся
Отличный материал, спасибо
Моя золотая находка, спасибо вам - очень доходчиво и понятно объясняете)
Ролик шедевр, час прошел незаметно
Спасибо за такой качественный и полезный контент 👍🏻
Спасибеще тебе уважаемый! как раз грызу эту тему ))
Благодарю за полезную информацию. Очень структурировано.
Отличное видео, спасибо за контент
Очень крутое видео! Все четко, структурировано и в меру детализированно! Благодарю за такой качественный контент! Особенно понравилось объяснение на Sequence диаграммах :)
Спасиб тебе, уважаемый! )))
Все понятно, большое спасибо!
Большое спасибо, за отличный материал! Очень-очень понравилось! Наконец получилось разобраться с архитектурой Spring Security
лучшее видео про security, спасибо за объяснение!
Боже, это очень классный видос, я обязательно посмотрю их все. Спасибо вам, классная подача. И заодно узнал об диаграммах, что их можно писать так) ❤
Шурик, принимай вагон благодарности! Очень приятно и интересно слушать. Потрясающий фристайл владения диаграммами %)
Благодарю!!!
Сообщение в поддержку крутого канала. Так держать.
Шурик! Классное видео! Ты мне очень помог! 😀
Огромное спасибо за ролик и отдельно и гагинское спасибо про момент с Basic аутентификаций. До этого ролика рвал волосы на голове пытаясь осознать как фронт может работать с моим REST Api. Каждый раз отправлять пароль ? А оказалось, что современные браузеры умеют работать c Basic аутентификаций. Спасибо человеческое ))) Лайк, подписка
Лично мне нравятся видосы на этом канале: информативные, свежая инфа, довольно хорошая подача! МБ автор в дальнейшем откроет себя, как ментора?!!!
Привет, спасибо за данный контент, продолжай в том же духе, очень все понятно и грамотно объяснил. Думаю даже через много лет, к этому видео будут обращаться. Сам хотел бы делать контент по Java и если делать то равняться точно стоит на тебя, еще раз спасибо
Я редко пишу комментарий под туториалами ибо они полный шлак, а с этим туториалом все намного иначе, спасибо тебе за то что делишься со своими знаниями, желаю тебе всего наилучшего! (кстати советую заранее готовить диаграммы чтобы сэкономить время)
лайк, коммент, некст!
изучил канал, подписочка получаетсы).
Александр, ты один из не многих профессионалов, кто отвечает на вопросы - попытаюсь воспользоваться этим чудом в шкурных целях )). На данный момент все найденные мной материалы по Spring Security напоминают сборник рецептов: "взять такой-то класс и переписать метод так-то, а если описать такой-то бин - то получится вот-так" - но это не дает понимания как работает вся кухня - есть ли человеческое описание архитектуры? (копаться в коде примеров с отладчиком для меня оказалось тоже малорезультативным занятим для понимания архитектуры). Еще раз спасибо за информацию.
@shurik_codes
11 ай бұрын
Ну вообще в документации Spring Security есть вполне подробное описание архитектуры как фреймворка в целом, так и его отдельных частей. Фреймворк и фильтры: docs.spring.io/spring-security/reference/servlet/architecture.html Аутентификация: docs.spring.io/spring-security/reference/servlet/authentication/architecture.html Авторизация: docs.spring.io/spring-security/reference/servlet/authorization/architecture.html
У вас в текстовом файле для диаграммы запросов-ответов хардкодный localhost:8080 . Это можно сделать на основе проперти из другого файла?
@shurik_codes
11 ай бұрын
1. Создаёшь JSON-файл (пусть будет properties.json) 2. В начале файла-диаграммы загружаешь содержимое в переменную: !$props = %load_json("properties.json") 3. В нужном месте вставляешь значение из переменной: $props.foo
адаптация под два монитора ^_^
Большое спасибо за видео! а есть ли ссылка на гитхаб?
@shurik_codes
23 күн бұрын
Нет, к сожалению, примеров кода к данном ролику нет
здравствуйте! Подскажите, пожалуйста, что за плагин у вас установлен, который делает из == один единый вытянутый символ =
@shurik_codes
2 ай бұрын
В настройках редактора - шрифт, включить поддержку лигатур
@user-mz4xm7ej3d
2 ай бұрын
@@shurik_codes спасибо большое
Здравствуйте. Подскажите, как вы смотрите документацию по классам, интерфейсам, методам в среде разработки (если это среда разработки)? Если это не в среде разработки, то как вы смотрите и где это? Я имею в виду, где описание зелеными буквами написано. Я новичок в java.
@shurik_codes
8 ай бұрын
ctrl+левая кнопка мыши по классу/интерфейсу/методу и т.д. в любой IDE
@AlexanderM762
8 ай бұрын
@@shurik_codes спасибо
@AlexanderM762
7 ай бұрын
@@shurik_codes еще заметил, что вы ищете документацию по классам в строке поиска. не подскажете как это сделать?
@shurik_codes
7 ай бұрын
2 раза Shift
Подскажите пожалуйста, какую операционную систему вы используете?
@shurik_codes
7 ай бұрын
Linux Mint
Подскажите, если сталкивались. А если например нужно 2-е конфигурации безопасности. Например для одной версии сервиса api-key, для другой версии и его методов аутентификация по JWT. Как это можно раз рулить в рамках одного приложения?
@shurik_codes
10 ай бұрын
Два компонента SecurityFilterChain с разными @Order и разными настройками
@user-iu6yz6ck6h
10 ай бұрын
@@shurik_codes Если например Order(1) у JWT, то вызывается только конфигурация JWT. Если установить на API-KEY Order(1) а на JWT 2 то срабатывает конфигурация только для API-KEY, а все методы закрытые JWT вызываются анонимом. Как должна описываться конфигурация чтобы этого не было? Если видели такое. В зависимости от Order разный набор фильтров, ну т.е. они не объединяются
@shurik_codes
10 ай бұрын
Нужно развести цепочки фильтров безопасности так, чтобы каждая из них обрабатывала только свои запросы при помощи HttpSecurity.securityMatcher()
@user-iu6yz6ck6h
10 ай бұрын
@@shurik_codes получается маппинг написан не уникальный и при вызове используется анонимный вызов?
Привет. Тут нависает проблема, мне идея пишет, что 'httpBasic()' и некоторые другие методы устарели и скоро будут удалены. Использую последнюю версию Security. Есть ли аналоги метода и можно ли как-нибудь исправить это? Или лучше перейти на более старую версию фреймворка?
@shurik_codes
11 ай бұрын
Да, в Spring Security с версии 6.1 некоторые DSL-цепочки отмечены как @Deprecated и будут удалены в следующей мажорной версии фреймворка - 7.0. Вместо них предполагается использовать DSL с лямбда-выражениями. В случае с той же Basic-аутентификацией код станет примерно таким: http.httpBasic(httpBasic -> httpBasic.realmName("...")...). В общем, всё, что было между началом цепочки методов DSL (httpBasic() в данном случае) и концом (and()) теперь переезжает внутрь лямбда-выражения. Вот тут подробнее: docs.spring.io/spring-security/reference/migration-7/configuration.html
@vla-zav
11 ай бұрын
@@shurik_codes Спасибо 🙏
Привет. Подскажи пожалуйста, а ты не занимаешься менторвством?
@shurik_codes
11 ай бұрын
Вообще да, занимаюсь, но сейчас на это времени не хватает
Вот не локальном ldiff фацле вме работает. А вот на реальном домене ,- на хоть ты плачь Может подскажете или покажете как прикрутить к реальному домену аутентификацию??? Как-то очень тяжело это даётся. В сети информации море и я уже виней просто тону. Заодно может подскажете как можно домен сделать. Может виртуалка какая, но только не ldiff файл
@shurik_codes
4 ай бұрын
Признаться честно, я далеко не сразу понял, что речь идёт о LDAP-аутентификации. Возможно, эта тема будет освещена в недалёком будущем.
А разве передача пороля и логин должна быть через POST, а не GET, так как данные, отправленные через POST, включаются в тело запроса и не отображаются в URL, что делает их менее уязвимыми к случайному или преднамеренному раскрытию через логи сервера или историю браузера?
@shurik_codes
2 ай бұрын
А относительно чего вопрос? При использовании формы - да, нужно передавать только в POST-запросе. Basic-аутентификация подразумевает передачу логина и пароля в HTTP-заголовке запроса Authorization, поэтому такой вариант допустим с любыми HTTP-методами, включая GET.
@user-un6zf5mc7g
2 ай бұрын
@@shurik_codes вопрос был про формочку, спасибо за ответ ☺️
сколько лет опыта надо, чтобы все это в голове держать?
@shurik_codes
Ай бұрын
Сложно сказать, вот сейчас кажется, чего проще - взять да прочитать спецификации и документацию. Ан нет, на всё нужно время, и на теорию, и на практику и на отработку навыков.
По поводу сессий и токенов, токены же гораздо уязвимее сессий, и у сессий гораздо больше возможностей, почему используют токены?
@shurik_codes
Жыл бұрын
Уязвимость токенов можно снизить, используя защищённые соединения и сохраняя их на стороне клиента в безопасном месте, например в куках с параметрами Secure, HttpOnly и SameSite=Strict, если речь идёт о браузере. Собственно, сессионные куки желательно тоже с такими параметрами сохранять. Популярность токенов как таковых связана с развитием сервисов и протоколов единого входа (Single Sign-On, SSO), таких как OAuth, OpenID, OIDC, CAS. В процессе аутентификации к сервису аутентификации обращается как пользователь из клиентского приложения, так и целевой сервис, к которому пользователь пытается получить доступ. Использовать стандартную HTTP-сессию в данном случае не получится, хотя состояние между запросами нужно передавать, и для этого хорошо подходят токены. Токен позволяет не акцентировать внимание на способах хранения сессии в распределённых решениях. Хотя это можно решить хранением сессионных данных в базах данных, как это сделано в Spring Security.
Кто такой Стас Астафьев?
@shurik_codes
17 күн бұрын
Автоблоггер
Где ты был раньше?....
@shurik_codes
11 ай бұрын
Дома
Здравствуйте. Как победить ошибку, которая выпадает на 30:40 в видео? status=999. Пользователь вроде авторизуется, при повторном входе не страницу это видно, но первый раз при авторизации выпадает эта ошибка.
@shurik_codes
8 ай бұрын
Если память меня не подводит, то это происходит потому что до этого я использовал в сессии браузера BASIC-аутентификацию, в результате чего данные BASIC-аутентификации сохранились в браузере, и при попытке входа при помощи формы одновременно используются два способа: BASIC и форма. Чтобы такого не происходило, способы аутентификации нужно разводить по разным цепочкам фильтров безопасности.
опять устаревший материал. безопасность меняется быстрее всего.
@shurik_codes
3 ай бұрын
а в чём он именно устаревший?
@John.Constantine.777
3 ай бұрын
@@shurik_codes что то навело на такие мысли. хотя сейчас смотрю - используется Chain.. пока отложил изучение, на днях проанализирую. Извиняюсь, если был не прав.
status 999 лечится spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
@shurik_codes
Ай бұрын
Но лучше всё же решать ошибку, а не отключать ErrorMvcAutoConfiguration)