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

КОМЕНТАРІ • 84

  • @Maxim_0Chka1920
    @Maxim_0Chka1920 7 місяців тому +9

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

  • @user-fl6wk8jr9i
    @user-fl6wk8jr9i Місяць тому +2

    Супер, очень полезный урок, наконец-то все встает на свои места, очень много знаете и хорошо умеете передавать свои знания, большое спасибо!

  • @Wansery
    @Wansery 4 місяці тому +10

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

    • @shurik_codes
      @shurik_codes  4 місяці тому +1

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

    • @mpchest1
      @mpchest1 4 місяці тому

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

  • @ARTSEMMAISEYENKA
    @ARTSEMMAISEYENKA 2 місяці тому +2

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

  • @Devivl
    @Devivl Рік тому +7

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

  • @ewreiizberlina3784
    @ewreiizberlina3784 Рік тому +3

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

  • @Ann_Askerova
    @Ann_Askerova Рік тому +4

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

  • @speedygonz4les
    @speedygonz4les 28 днів тому +1

    Спасибо за наглядность 🤝 без лишнего, приятный голос, топ ;D

  • @kirumaqq
    @kirumaqq 5 місяців тому +2

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

  • @dmitrelkin9256
    @dmitrelkin9256 Рік тому +4

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

  • @2101MrPavel
    @2101MrPavel 8 місяців тому +1

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

  • @user-kk5xm9ph1g
    @user-kk5xm9ph1g 5 місяців тому +2

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

  • @vik11111
    @vik11111 Рік тому +5

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

  • @exploringthedat
    @exploringthedat 4 місяці тому +1

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

  • @ponomarev302
    @ponomarev302 10 місяців тому +2

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

  • @mregrson
    @mregrson 6 місяців тому +1

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

  • @veniaminsamoylov1617
    @veniaminsamoylov1617 2 місяці тому +1

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

  • @emrahhakan5462
    @emrahhakan5462 29 днів тому +1

    Отличная серия спасибо за труд ❤

  • @rainrainov4495
    @rainrainov4495 3 місяці тому +1

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

  • @alexbern8656
    @alexbern8656 5 місяців тому +1

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

  • @IlyaSernikov
    @IlyaSernikov 2 місяці тому +1

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

  • @Roman_jv
    @Roman_jv Рік тому +1

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

  • @user-nx6dj6vi7c
    @user-nx6dj6vi7c Місяць тому +1

    Thanks bro, ochen khoroshiy video urok🤝

  • @MgsMen
    @MgsMen 7 місяців тому +2

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

  • @user-qb3ck7cq3k
    @user-qb3ck7cq3k 2 місяці тому +1

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

  • @tami-he4mm
    @tami-he4mm 7 місяців тому +5

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

  • @paradiesd
    @paradiesd Рік тому +4

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

  • @user-yp9if6tq7t
    @user-yp9if6tq7t Рік тому +2

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

  • @user-lx4dc1ls3e
    @user-lx4dc1ls3e 8 місяців тому +2

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

  • @guitarhub7860
    @guitarhub7860 Рік тому +2

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

  • @hackim2554
    @hackim2554 22 дні тому

    - Сколько раз пересмотрел?
    - Да

  • @romanovichihin2429
    @romanovichihin2429 10 місяців тому +1

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

  • @dmitrelkin9256
    @dmitrelkin9256 Рік тому +5

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

    • @shurik_codes
      @shurik_codes  Рік тому +6

      Ну вообще в документации 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

  • @guitarhub7860
    @guitarhub7860 Рік тому +2

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

  • @dimirsen
    @dimirsen Рік тому +1

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

    • @shurik_codes
      @shurik_codes  Рік тому +1

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

  • @user-pt6vo2kp7c
    @user-pt6vo2kp7c 2 місяці тому +1

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

    • @shurik_codes
      @shurik_codes  2 місяці тому

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

  • @check-oy3ll
    @check-oy3ll 8 місяців тому +1

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

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6h 11 місяців тому +1

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

    • @shurik_codes
      @shurik_codes  11 місяців тому +2

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

    • @user-iu6yz6ck6h
      @user-iu6yz6ck6h 11 місяців тому

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

    • @shurik_codes
      @shurik_codes  11 місяців тому

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

    • @user-iu6yz6ck6h
      @user-iu6yz6ck6h 11 місяців тому

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

  • @AlexanderM762
    @AlexanderM762 9 місяців тому +1

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

    • @shurik_codes
      @shurik_codes  9 місяців тому +1

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

    • @AlexanderM762
      @AlexanderM762 9 місяців тому

      @@shurik_codes спасибо

    • @AlexanderM762
      @AlexanderM762 9 місяців тому

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

    • @shurik_codes
      @shurik_codes  9 місяців тому

      2 раза Shift

  • @kovalenkoam
    @kovalenkoam 6 місяців тому +1

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

    • @shurik_codes
      @shurik_codes  6 місяців тому +1

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

  • @vla-zav
    @vla-zav Рік тому +1

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

    • @shurik_codes
      @shurik_codes  Рік тому +2

      Да, в 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 Рік тому +1

      @@shurik_codes Спасибо 🙏

  • @user-mz4xm7ej3d
    @user-mz4xm7ej3d 3 місяці тому

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

    • @shurik_codes
      @shurik_codes  3 місяці тому +1

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

    • @user-mz4xm7ej3d
      @user-mz4xm7ej3d 3 місяці тому

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

  • @ram0973
    @ram0973 Рік тому +1

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

    • @shurik_codes
      @shurik_codes  Рік тому +2

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

  • @performanceact400
    @performanceact400 Рік тому +1

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

    • @shurik_codes
      @shurik_codes  Рік тому

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

  • @MrAPPOLON123
    @MrAPPOLON123 3 місяці тому +1

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

    • @shurik_codes
      @shurik_codes  3 місяці тому

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

  • @user-un6zf5mc7g
    @user-un6zf5mc7g 4 місяці тому

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

    • @shurik_codes
      @shurik_codes  4 місяці тому

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

    • @user-un6zf5mc7g
      @user-un6zf5mc7g 4 місяці тому

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

  • @vla-zav
    @vla-zav Рік тому +2

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

  • @maximcyganek7944
    @maximcyganek7944 2 місяці тому

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

  • @John.Constantine.777
    @John.Constantine.777 5 місяців тому

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

    • @shurik_codes
      @shurik_codes  5 місяців тому +2

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

    • @John.Constantine.777
      @John.Constantine.777 5 місяців тому

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

  • @user-qq9ci6ol7x
    @user-qq9ci6ol7x 9 місяців тому

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

    • @shurik_codes
      @shurik_codes  9 місяців тому

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

  • @seriktyulemissov5757
    @seriktyulemissov5757 4 місяці тому

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

    • @shurik_codes
      @shurik_codes  3 місяці тому

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