Аутентификация - Spring Security в деталях
Вставка
- Опубліковано 29 чер 2024
- В этом ролике я рассказываю о компонентах и реализации аутентификации в 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
Бро привет, слушай в начале этого ролика ты говорил что ты не умеешь вести долгие и интересные ролики, слушай я с тобой в корни не согласен так как ты очень умный и крутой чувак который понял как это работает и это круто, у тебя абалденно получается преподносить людям инфу такой какая она есть, я сам являюсь джавистом и скажу честно не каждый как говориться так сможет))) по этому я честно надеюсь что ты прочтешь мой коммент из тысячи других и запишеш длинный видос по хотя бы разбору одной темы из секьюрити)). Давай бро делай дальше в том же духе )) не останавливайся
Супер, очень полезный урок, наконец-то все встает на свои места, очень много знаете и хорошо умеете передавать свои знания, большое спасибо!
Когда я увидел, что у тебя даже визуализация написана через код, я прифегел конечно😂 сразу видно хорошего программиста
Скорее ленивого) Мне проще накидать схему в PlantUML, чем где-то нарисовать)
@@shurik_codes прикольный плагинчик, надо будет затестить
Как же мне повезло что я вовремя нашел ваш канал, лучший канал про джаву и программирование в целом
Шурик, принимай вагон благодарности! Очень приятно и интересно слушать. Потрясающий фристайл владения диаграммами %)
Моя золотая находка, спасибо вам - очень доходчиво и понятно объясняете)
Спасибо за такой качественный и полезный контент 👍🏻
Спасибо за наглядность 🤝 без лишнего, приятный голос, топ ;D
Ролик шедевр, час прошел незаметно
Спасибеще тебе уважаемый! как раз грызу эту тему ))
Благодарю за полезную информацию. Очень структурировано.
Большое спасибо, за отличный материал! Очень-очень понравилось! Наконец получилось разобраться с архитектурой Spring Security
Боже, это очень классный видос, я обязательно посмотрю их все. Спасибо вам, классная подача. И заодно узнал об диаграммах, что их можно писать так) ❤
лучшее видео про security, спасибо за объяснение!
Отличный материал, спасибо
Шурик! Классное видео! Ты мне очень помог! 😀
Как мне раньше этого твиде не хватало спасибо хорошая работа.
Отличная серия спасибо за труд ❤
Сообщение в поддержку крутого канала. Так держать.
Отличное видео, спасибо за контент
Очень крутое видео! Все четко, структурировано и в меру детализированно! Благодарю за такой качественный контент!
Особенно понравилось объяснение на Sequence диаграммах :)
Спасиб тебе, уважаемый! )))
Thanks bro, ochen khoroshiy video urok🤝
Огромное спасибо за ролик и отдельно и гагинское спасибо про момент с Basic аутентификаций. До этого ролика рвал волосы на голове пытаясь осознать как фронт может работать с моим REST Api. Каждый раз отправлять пароль ? А оказалось, что современные браузеры умеют работать c Basic аутентификаций. Спасибо человеческое ))) Лайк, подписка
Все понятно, большое спасибо!
Я редко пишу комментарий под туториалами ибо они полный шлак, а с этим туториалом все намного иначе, спасибо тебе за то что делишься со своими знаниями, желаю тебе всего наилучшего! (кстати советую заранее готовить диаграммы чтобы сэкономить время)
Привет, спасибо за данный контент, продолжай в том же духе, очень все понятно и грамотно объяснил. Думаю даже через много лет, к этому видео будут обращаться. Сам хотел бы делать контент по Java и если делать то равняться точно стоит на тебя, еще раз спасибо
Благодарю!!!
Лично мне нравятся видосы на этом канале: информативные, свежая инфа, довольно хорошая подача! МБ автор в дальнейшем откроет себя, как ментора?!!!
изучил канал, подписочка получаетсы).
- Сколько раз пересмотрел?
- Да
лайк, коммент, некст!
Александр, ты один из не многих профессионалов, кто отвечает на вопросы - попытаюсь воспользоваться этим чудом в шкурных целях )). На данный момент все найденные мной материалы по Spring Security напоминают сборник рецептов: "взять такой-то класс и переписать метод так-то, а если описать такой-то бин - то получится вот-так" - но это не дает понимания как работает вся кухня - есть ли человеческое описание архитектуры? (копаться в коде примеров с отладчиком для меня оказалось тоже малорезультативным занятим для понимания архитектуры). Еще раз спасибо за информацию.
Ну вообще в документации 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 . Это можно сделать на основе проперти из другого файла?
1. Создаёшь JSON-файл (пусть будет properties.json)
2. В начале файла-диаграммы загружаешь содержимое в переменную: !$props = %load_json("properties.json")
3. В нужном месте вставляешь значение из переменной: $props.foo
Большое спасибо за видео!
а есть ли ссылка на гитхаб?
Нет, к сожалению, примеров кода к данном ролику нет
Подскажите пожалуйста, какую операционную систему вы используете?
Linux Mint
Подскажите, если сталкивались. А если например нужно 2-е конфигурации безопасности. Например для одной версии сервиса api-key, для другой версии и его методов аутентификация по JWT. Как это можно раз рулить в рамках одного приложения?
Два компонента SecurityFilterChain с разными @Order и разными настройками
@@shurik_codes Если например Order(1) у JWT, то вызывается только конфигурация JWT. Если установить на API-KEY Order(1) а на JWT 2 то срабатывает конфигурация только для API-KEY, а все методы закрытые JWT вызываются анонимом. Как должна описываться конфигурация чтобы этого не было? Если видели такое. В зависимости от Order разный набор фильтров, ну т.е. они не объединяются
Нужно развести цепочки фильтров безопасности так, чтобы каждая из них обрабатывала только свои запросы при помощи HttpSecurity.securityMatcher()
@@shurik_codes получается маппинг написан не уникальный и при вызове используется анонимный вызов?
Здравствуйте. Подскажите, как вы смотрите документацию по классам, интерфейсам, методам в среде разработки (если это среда разработки)? Если это не в среде разработки, то как вы смотрите и где это? Я имею в виду, где описание зелеными буквами написано. Я новичок в java.
ctrl+левая кнопка мыши по классу/интерфейсу/методу и т.д. в любой IDE
@@shurik_codes спасибо
@@shurik_codes еще заметил, что вы ищете документацию по классам в строке поиска. не подскажете как это сделать?
2 раза Shift
Вот не локальном ldiff фацле вме работает. А вот на реальном домене ,- на хоть ты плачь
Может подскажете или покажете как прикрутить к реальному домену аутентификацию??? Как-то очень тяжело это даётся. В сети информации море и я уже виней просто тону. Заодно может подскажете как можно домен сделать. Может виртуалка какая, но только не ldiff файл
Признаться честно, я далеко не сразу понял, что речь идёт о LDAP-аутентификации. Возможно, эта тема будет освещена в недалёком будущем.
Привет. Тут нависает проблема, мне идея пишет, что 'httpBasic()' и некоторые другие методы устарели и скоро будут удалены.
Использую последнюю версию Security.
Есть ли аналоги метода и можно ли как-нибудь исправить это? Или лучше перейти на более старую версию фреймворка?
Да, в 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
@@shurik_codes Спасибо 🙏
здравствуйте! Подскажите, пожалуйста, что за плагин у вас установлен, который делает из == один единый вытянутый символ =
В настройках редактора - шрифт, включить поддержку лигатур
@@shurik_codes спасибо большое
По поводу сессий и токенов, токены же гораздо уязвимее сессий, и у сессий гораздо больше возможностей, почему используют токены?
Уязвимость токенов можно снизить, используя защищённые соединения и сохраняя их на стороне клиента в безопасном месте, например в куках с параметрами Secure, HttpOnly и SameSite=Strict, если речь идёт о браузере. Собственно, сессионные куки желательно тоже с такими параметрами сохранять.
Популярность токенов как таковых связана с развитием сервисов и протоколов единого входа (Single Sign-On, SSO), таких как OAuth, OpenID, OIDC, CAS. В процессе аутентификации к сервису аутентификации обращается как пользователь из клиентского приложения, так и целевой сервис, к которому пользователь пытается получить доступ. Использовать стандартную HTTP-сессию в данном случае не получится, хотя состояние между запросами нужно передавать, и для этого хорошо подходят токены.
Токен позволяет не акцентировать внимание на способах хранения сессии в распределённых решениях. Хотя это можно решить хранением сессионных данных в базах данных, как это сделано в Spring Security.
Привет.
Подскажи пожалуйста, а ты не занимаешься менторвством?
Вообще да, занимаюсь, но сейчас на это времени не хватает
сколько лет опыта надо, чтобы все это в голове держать?
Сложно сказать, вот сейчас кажется, чего проще - взять да прочитать спецификации и документацию. Ан нет, на всё нужно время, и на теорию, и на практику и на отработку навыков.
А разве передача пороля и логин должна быть через POST, а не GET, так как данные, отправленные через POST, включаются в тело запроса и не отображаются в URL, что делает их менее уязвимыми к случайному или преднамеренному раскрытию через логи сервера или историю браузера?
А относительно чего вопрос? При использовании формы - да, нужно передавать только в POST-запросе. Basic-аутентификация подразумевает передачу логина и пароля в HTTP-заголовке запроса Authorization, поэтому такой вариант допустим с любыми HTTP-методами, включая GET.
@@shurik_codes вопрос был про формочку, спасибо за ответ ☺️
Где ты был раньше?....
Дома
Кто такой Стас Астафьев?
Автоблоггер
опять устаревший материал.
безопасность меняется быстрее всего.
а в чём он именно устаревший?
@@shurik_codes что то навело на такие мысли. хотя сейчас смотрю - используется Chain.. пока отложил изучение, на днях проанализирую. Извиняюсь, если был не прав.
Здравствуйте. Как победить ошибку, которая выпадает на 30:40 в видео? status=999. Пользователь вроде авторизуется, при повторном входе не страницу это видно, но первый раз при авторизации выпадает эта ошибка.
Если память меня не подводит, то это происходит потому что до этого я использовал в сессии браузера BASIC-аутентификацию, в результате чего данные BASIC-аутентификации сохранились в браузере, и при попытке входа при помощи формы одновременно используются два способа: BASIC и форма. Чтобы такого не происходило, способы аутентификации нужно разводить по разным цепочкам фильтров безопасности.
status 999 лечится
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
Но лучше всё же решать ошибку, а не отключать ErrorMvcAutoConfiguration)