Аутентификация - 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

  • @ARTSEMMAISEYENKA
    @ARTSEMMAISEYENKA13 күн бұрын

    Как же мне повезло что я вовремя нашел ваш канал, лучший канал про джаву и программирование в целом

  • @Wansery
    @Wansery3 ай бұрын

    Когда я увидел, что у тебя даже визуализация написана через код, я прифегел конечно😂 сразу видно хорошего программиста

  • @shurik_codes

    @shurik_codes

    3 ай бұрын

    Скорее ленивого) Мне проще накидать схему в PlantUML, чем где-то нарисовать)

  • @mpchest1

    @mpchest1

    2 ай бұрын

    @@shurik_codes прикольный плагинчик, надо будет затестить

  • @veniaminsamoylov1617
    @veniaminsamoylov161717 күн бұрын

    Как мне раньше этого твиде не хватало спасибо хорошая работа.

  • @Maxim_0Chka1920
    @Maxim_0Chka19205 ай бұрын

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

  • @ponomarev302
    @ponomarev3028 ай бұрын

    Отличный материал, спасибо

  • @ewreiizberlina3784
    @ewreiizberlina378410 ай бұрын

    Моя золотая находка, спасибо вам - очень доходчиво и понятно объясняете)

  • @kirumaqq
    @kirumaqq3 ай бұрын

    Ролик шедевр, час прошел незаметно

  • @Ann_Askerova
    @Ann_Askerova11 ай бұрын

    Спасибо за такой качественный и полезный контент 👍🏻

  • @dmitrelkin9256
    @dmitrelkin9256 Жыл бұрын

    Спасибеще тебе уважаемый! как раз грызу эту тему ))

  • @2101MrPavel
    @2101MrPavel6 ай бұрын

    Благодарю за полезную информацию. Очень структурировано.

  • @alexbern8656
    @alexbern86563 ай бұрын

    Отличное видео, спасибо за контент

  • @IlyaSernikov
    @IlyaSernikovАй бұрын

    Очень крутое видео! Все четко, структурировано и в меру детализированно! Благодарю за такой качественный контент! Особенно понравилось объяснение на Sequence диаграммах :)

  • @Roman_jv
    @Roman_jv11 ай бұрын

    Спасиб тебе, уважаемый! )))

  • @user-qb3ck7cq3k
    @user-qb3ck7cq3kАй бұрын

    Все понятно, большое спасибо!

  • @user-kk5xm9ph1g
    @user-kk5xm9ph1g4 ай бұрын

    Большое спасибо, за отличный материал! Очень-очень понравилось! Наконец получилось разобраться с архитектурой Spring Security

  • @exploringthedat
    @exploringthedat2 ай бұрын

    лучшее видео про security, спасибо за объяснение!

  • @vik11111
    @vik1111111 ай бұрын

    Боже, это очень классный видос, я обязательно посмотрю их все. Спасибо вам, классная подача. И заодно узнал об диаграммах, что их можно писать так) ❤

  • @Devivl
    @Devivl10 ай бұрын

    Шурик, принимай вагон благодарности! Очень приятно и интересно слушать. Потрясающий фристайл владения диаграммами %)

  • @user-yp9if6tq7t
    @user-yp9if6tq7t11 ай бұрын

    Благодарю!!!

  • @rainrainov4495
    @rainrainov4495Ай бұрын

    Сообщение в поддержку крутого канала. Так держать.

  • @mregrson
    @mregrson5 ай бұрын

    Шурик! Классное видео! Ты мне очень помог! 😀

  • @MgsMen
    @MgsMen6 ай бұрын

    Огромное спасибо за ролик и отдельно и гагинское спасибо про момент с Basic аутентификаций. До этого ролика рвал волосы на голове пытаясь осознать как фронт может работать с моим REST Api. Каждый раз отправлять пароль ? А оказалось, что современные браузеры умеют работать c Basic аутентификаций. Спасибо человеческое ))) Лайк, подписка

  • @user-lx4dc1ls3e
    @user-lx4dc1ls3e6 ай бұрын

    Лично мне нравятся видосы на этом канале: информативные, свежая инфа, довольно хорошая подача! МБ автор в дальнейшем откроет себя, как ментора?!!!

  • @paradiesd
    @paradiesd Жыл бұрын

    Привет, спасибо за данный контент, продолжай в том же духе, очень все понятно и грамотно объяснил. Думаю даже через много лет, к этому видео будут обращаться. Сам хотел бы делать контент по Java и если делать то равняться точно стоит на тебя, еще раз спасибо

  • @tami-he4mm
    @tami-he4mm5 ай бұрын

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

  • @romanovichihin2429
    @romanovichihin24299 ай бұрын

    лайк, коммент, некст!

  • @guitarhub7860
    @guitarhub786011 ай бұрын

    изучил канал, подписочка получаетсы).

  • @dmitrelkin9256
    @dmitrelkin925611 ай бұрын

    Александр, ты один из не многих профессионалов, кто отвечает на вопросы - попытаюсь воспользоваться этим чудом в шкурных целях )). На данный момент все найденные мной материалы по Spring Security напоминают сборник рецептов: "взять такой-то класс и переписать метод так-то, а если описать такой-то бин - то получится вот-так" - но это не дает понимания как работает вся кухня - есть ли человеческое описание архитектуры? (копаться в коде примеров с отладчиком для меня оказалось тоже малорезультативным занятим для понимания архитектуры). Еще раз спасибо за информацию.

  • @shurik_codes

    @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

  • @dimirsen
    @dimirsen11 ай бұрын

    У вас в текстовом файле для диаграммы запросов-ответов хардкодный localhost:8080 . Это можно сделать на основе проперти из другого файла?

  • @shurik_codes

    @shurik_codes

    11 ай бұрын

    1. Создаёшь JSON-файл (пусть будет properties.json) 2. В начале файла-диаграммы загружаешь содержимое в переменную: !$props = %load_json("properties.json") 3. В нужном месте вставляешь значение из переменной: $props.foo

  • @guitarhub7860
    @guitarhub786011 ай бұрын

    адаптация под два монитора ^_^

  • @user-pt6vo2kp7c
    @user-pt6vo2kp7c24 күн бұрын

    Большое спасибо за видео! а есть ли ссылка на гитхаб?

  • @shurik_codes

    @shurik_codes

    23 күн бұрын

    Нет, к сожалению, примеров кода к данном ролику нет

  • @user-mz4xm7ej3d
    @user-mz4xm7ej3d2 ай бұрын

    здравствуйте! Подскажите, пожалуйста, что за плагин у вас установлен, который делает из == один единый вытянутый символ =

  • @shurik_codes

    @shurik_codes

    2 ай бұрын

    В настройках редактора - шрифт, включить поддержку лигатур

  • @user-mz4xm7ej3d

    @user-mz4xm7ej3d

    2 ай бұрын

    @@shurik_codes спасибо большое

  • @AlexanderM762
    @AlexanderM7628 ай бұрын

    Здравствуйте. Подскажите, как вы смотрите документацию по классам, интерфейсам, методам в среде разработки (если это среда разработки)? Если это не в среде разработки, то как вы смотрите и где это? Я имею в виду, где описание зелеными буквами написано. Я новичок в java.

  • @shurik_codes

    @shurik_codes

    8 ай бұрын

    ctrl+левая кнопка мыши по классу/интерфейсу/методу и т.д. в любой IDE

  • @AlexanderM762

    @AlexanderM762

    8 ай бұрын

    @@shurik_codes спасибо

  • @AlexanderM762

    @AlexanderM762

    7 ай бұрын

    @@shurik_codes еще заметил, что вы ищете документацию по классам в строке поиска. не подскажете как это сделать?

  • @shurik_codes

    @shurik_codes

    7 ай бұрын

    2 раза Shift

  • @check-oy3ll
    @check-oy3ll7 ай бұрын

    Подскажите пожалуйста, какую операционную систему вы используете?

  • @shurik_codes

    @shurik_codes

    7 ай бұрын

    Linux Mint

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6h10 ай бұрын

    Подскажите, если сталкивались. А если например нужно 2-е конфигурации безопасности. Например для одной версии сервиса api-key, для другой версии и его методов аутентификация по JWT. Как это можно раз рулить в рамках одного приложения?

  • @shurik_codes

    @shurik_codes

    10 ай бұрын

    Два компонента SecurityFilterChain с разными @Order и разными настройками

  • @user-iu6yz6ck6h

    @user-iu6yz6ck6h

    10 ай бұрын

    @@shurik_codes Если например Order(1) у JWT, то вызывается только конфигурация JWT. Если установить на API-KEY Order(1) а на JWT 2 то срабатывает конфигурация только для API-KEY, а все методы закрытые JWT вызываются анонимом. Как должна описываться конфигурация чтобы этого не было? Если видели такое. В зависимости от Order разный набор фильтров, ну т.е. они не объединяются

  • @shurik_codes

    @shurik_codes

    10 ай бұрын

    Нужно развести цепочки фильтров безопасности так, чтобы каждая из них обрабатывала только свои запросы при помощи HttpSecurity.securityMatcher()

  • @user-iu6yz6ck6h

    @user-iu6yz6ck6h

    10 ай бұрын

    @@shurik_codes получается маппинг написан не уникальный и при вызове используется анонимный вызов?

  • @vla-zav
    @vla-zav11 ай бұрын

    Привет. Тут нависает проблема, мне идея пишет, что 'httpBasic()' и некоторые другие методы устарели и скоро будут удалены. Использую последнюю версию Security. Есть ли аналоги метода и можно ли как-нибудь исправить это? Или лучше перейти на более старую версию фреймворка?

  • @shurik_codes

    @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

    @vla-zav

    11 ай бұрын

    @@shurik_codes Спасибо 🙏

  • @performanceact400
    @performanceact40011 ай бұрын

    Привет. Подскажи пожалуйста, а ты не занимаешься менторвством?

  • @shurik_codes

    @shurik_codes

    11 ай бұрын

    Вообще да, занимаюсь, но сейчас на это времени не хватает

  • @kovalenkoam
    @kovalenkoam4 ай бұрын

    Вот не локальном ldiff фацле вме работает. А вот на реальном домене ,- на хоть ты плачь Может подскажете или покажете как прикрутить к реальному домену аутентификацию??? Как-то очень тяжело это даётся. В сети информации море и я уже виней просто тону. Заодно может подскажете как можно домен сделать. Может виртуалка какая, но только не ldiff файл

  • @shurik_codes

    @shurik_codes

    4 ай бұрын

    Признаться честно, я далеко не сразу понял, что речь идёт о LDAP-аутентификации. Возможно, эта тема будет освещена в недалёком будущем.

  • @user-un6zf5mc7g
    @user-un6zf5mc7g2 ай бұрын

    А разве передача пороля и логин должна быть через POST, а не GET, так как данные, отправленные через POST, включаются в тело запроса и не отображаются в URL, что делает их менее уязвимыми к случайному или преднамеренному раскрытию через логи сервера или историю браузера?

  • @shurik_codes

    @shurik_codes

    2 ай бұрын

    А относительно чего вопрос? При использовании формы - да, нужно передавать только в POST-запросе. Basic-аутентификация подразумевает передачу логина и пароля в HTTP-заголовке запроса Authorization, поэтому такой вариант допустим с любыми HTTP-методами, включая GET.

  • @user-un6zf5mc7g

    @user-un6zf5mc7g

    2 ай бұрын

    @@shurik_codes вопрос был про формочку, спасибо за ответ ☺️

  • @MrAPPOLON123
    @MrAPPOLON123Ай бұрын

    сколько лет опыта надо, чтобы все это в голове держать?

  • @shurik_codes

    @shurik_codes

    Ай бұрын

    Сложно сказать, вот сейчас кажется, чего проще - взять да прочитать спецификации и документацию. Ан нет, на всё нужно время, и на теорию, и на практику и на отработку навыков.

  • @ram0973
    @ram0973 Жыл бұрын

    По поводу сессий и токенов, токены же гораздо уязвимее сессий, и у сессий гораздо больше возможностей, почему используют токены?

  • @shurik_codes

    @shurik_codes

    Жыл бұрын

    Уязвимость токенов можно снизить, используя защищённые соединения и сохраняя их на стороне клиента в безопасном месте, например в куках с параметрами Secure, HttpOnly и SameSite=Strict, если речь идёт о браузере. Собственно, сессионные куки желательно тоже с такими параметрами сохранять. Популярность токенов как таковых связана с развитием сервисов и протоколов единого входа (Single Sign-On, SSO), таких как OAuth, OpenID, OIDC, CAS. В процессе аутентификации к сервису аутентификации обращается как пользователь из клиентского приложения, так и целевой сервис, к которому пользователь пытается получить доступ. Использовать стандартную HTTP-сессию в данном случае не получится, хотя состояние между запросами нужно передавать, и для этого хорошо подходят токены. Токен позволяет не акцентировать внимание на способах хранения сессии в распределённых решениях. Хотя это можно решить хранением сессионных данных в базах данных, как это сделано в Spring Security.

  • @maximcyganek7944
    @maximcyganek794417 күн бұрын

    Кто такой Стас Астафьев?

  • @shurik_codes

    @shurik_codes

    17 күн бұрын

    Автоблоггер

  • @vla-zav
    @vla-zav11 ай бұрын

    Где ты был раньше?....

  • @shurik_codes

    @shurik_codes

    11 ай бұрын

    Дома

  • @user-qq9ci6ol7x
    @user-qq9ci6ol7x8 ай бұрын

    Здравствуйте. Как победить ошибку, которая выпадает на 30:40 в видео? status=999. Пользователь вроде авторизуется, при повторном входе не страницу это видно, но первый раз при авторизации выпадает эта ошибка.

  • @shurik_codes

    @shurik_codes

    8 ай бұрын

    Если память меня не подводит, то это происходит потому что до этого я использовал в сессии браузера BASIC-аутентификацию, в результате чего данные BASIC-аутентификации сохранились в браузере, и при попытке входа при помощи формы одновременно используются два способа: BASIC и форма. Чтобы такого не происходило, способы аутентификации нужно разводить по разным цепочкам фильтров безопасности.

  • @John.Constantine.777
    @John.Constantine.7773 ай бұрын

    опять устаревший материал. безопасность меняется быстрее всего.

  • @shurik_codes

    @shurik_codes

    3 ай бұрын

    а в чём он именно устаревший?

  • @John.Constantine.777

    @John.Constantine.777

    3 ай бұрын

    @@shurik_codes что то навело на такие мысли. хотя сейчас смотрю - используется Chain.. пока отложил изучение, на днях проанализирую. Извиняюсь, если был не прав.

  • @seriktyulemissov5757
    @seriktyulemissov57572 ай бұрын

    status 999 лечится spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

  • @shurik_codes

    @shurik_codes

    Ай бұрын

    Но лучше всё же решать ошибку, а не отключать ErrorMvcAutoConfiguration)

Келесі