JWT-аутентификация для веб-приложений - Spring Security

Sdílet
Vložit
  • čas přidán 22. 08. 2024
  • В отличие от нативных приложений, веб-приложения самостоятельно не могут сохранять аутентификационные данные в безопасном месте, следовательно, продемонстрированный в предыдущем ролике способ получения ключей доступа не актуален для веб-приложений.
    В случае с последними аутентификационные данные правильнее всего хранить в HTTP-куках, доступ к которым имеет только серверная сторона.
    В этом ролике я продемонстрирую реализацию сохранения куки с JWT-токеном и дальнейшую аутентификацию при её помощи.
    Репозиторий проекта: github.com/ale...
    #java #jwt #springsecurity
    Мой сайт: alexkosarev.name/
    Паблик в VK: public2...
    Канал в Telegram: t.me/+TZCuO38v...
    Стать доном: donut/s...
    Донаты в Boosty: boosty.to/akos...
    Донаты в Tinkoff: www.tinkoff.ru...

Komentáře • 30

  • @nikolaymatvienko1090
    @nikolaymatvienko1090 Před rokem +8

    Приятно смотреть как работает профессионал. В каждом видео нахожу для себя интересные подходы к решению задач.

  • @moscowkremlingovernment
    @moscowkremlingovernment Před rokem +8

    В детстве ждал Диснея по воскресеньям,в отрочестве Денди новую реальность и "От винта!",в юности акул пера или вручений премии Муз-тв,вырос,возмужал но жду Саниных видео как ребенок Диснея. Спасибо за видос,все как всегда четко и по существу. Огромный респект и сердечное пожелание процветания каналу и автору.

    • @shurik_codes
      @shurik_codes  Před rokem

      Спасибо за тёплые слова)

  • @maksimbravyi7324
    @maksimbravyi7324 Před rokem +5

    Кладезь знаний, актуальные видео по спрингу! лайк, подписка. Спасибо!

  • @paradiesd
    @paradiesd Před rokem +7

    Спасибо за видео, всегда очень интересно и понятно

  • @artemv5226
    @artemv5226 Před 7 měsíci +1

    Спасибо за великолепные ролики! Сделал опираясь на них гибрид для single page web-приложения, где refresh-токен хранится в куке, а access токен в памяти приложения. При этом обновляются одновременно и refresh-кука, и access-кука, дабы refresh не исчезала через отведенное время.

  • @AlexK-df4ne
    @AlexK-df4ne Před rokem +1

    ну талант рассказчика на лицо, джаву не учу, но заинтересовало.

  • @evgenyleshok5892
    @evgenyleshok5892 Před 8 měsíci +1

    Большое спасибо за видео, объяснениe на высоком уровне

    • @shurik_codes
      @shurik_codes  Před 8 měsíci

      Так у меня всё свалено в sandbox

    • @user-sj6hl1ye4r
      @user-sj6hl1ye4r Před 7 měsíci

      @@shurik_codes но там же нет классов, связанных с cookies, только access/refresh tokens. Было бы удобно, если бы выложили и cookie-authentication модуль.

    • @user-sj6hl1ye4r
      @user-sj6hl1ye4r Před 7 měsíci

      @@shurik_codes а, там по дефолту стоит не та ветка, поэтому не был виден этот модуль.

    • @shurik_codes
      @shurik_codes  Před 7 měsíci +1

      Спасибо за инфу, удалил main@@user-sj6hl1ye4r

  • @eapashkov
    @eapashkov Před rokem +3

    Так, а что ты свое изображение в нижнюю правую часть экрана не перетащишь? Кажется там меньше суеты происходит, чем справа вверху

    • @eapashkov
      @eapashkov Před rokem +1

      Ну и вопрос, КК и Oauth2 будут? Я смотрел конец и надеюсь ты выберешь верный вариант)

    • @shurik_codes
      @shurik_codes  Před rokem

      снизу всякие логи выводятся)

    • @shurik_codes
      @shurik_codes  Před rokem

      будет

  • @user-md8bw3te3v
    @user-md8bw3te3v Před 3 měsíci

    У меня есть пару вопросов, сейчас сам начал делать регистрацию и как у меня происходит при авторизации,я создаю два токена refresh и access, но храню я в куки только храню только accesToken и, а Refresh в базе данных, но сам Refresh Token не хранит полезной информации на основании, которой можно создать accesToken правильный ли это подход? И мне интересно можете ли посоветовать книгу по самим паттернам, потому что явно можно увидеть, что все ваши ролики создаются с использованием паттернов.

  • @wvolfff
    @wvolfff Před rokem +1

    Спасибо за видео, но если кука живёт один день, получается пользователю придётся каждые 24 часа производить процедуру входа? Звучит не слишком приятно для пользователя. Единственное, что придумал, чтобы обойти этот момент, это сделать куку с токеном с неограниченным сроком жизни. В связи с этим вопрос. Можно ли сделать более элегантно?

    • @shurik_codes
      @shurik_codes  Před rokem

      Ну так я сутки сделал в качестве примера, можно больше сделать

  • @user-uz7nu5zf5h
    @user-uz7nu5zf5h Před 8 měsíci +1

    Cпасибо, очень хорошее видео....
    Однако, не могу понять, если СSRF-токен хранится также в cookie, то при CSRF-атаке обе cookie(JWT и СSRF-токен) отправятся на сервер, где они корректно обработаются и запрос будет выполнен

    • @shurik_codes
      @shurik_codes  Před 8 měsíci

      Про CSRF: czcams.com/video/LtvS0F04C2c/video.html
      Но вообще SameSite=Strict + CORS

    • @user-uz7nu5zf5h
      @user-uz7nu5zf5h Před 8 měsíci +1

      Спасибо
      Очень хорошее видео@@shurik_codes

  • @exlemark6220
    @exlemark6220 Před rokem +1

    Спасибо за видео, было полезным.
    Есть вопрос: а как сделать так чтобы на статику авторизация не проверялась (чтобы фильтр не ломился в базу по каждому запросу)?
    Например такое указание все равно не помогает .requestMatchers("/**").permitAll()

    • @shurik_codes
      @shurik_codes  Před rokem +2

      Этого можно достичь настройками параметров запросов, которые должны обрабатываться цепочкой фильтров безопасности, делается это методом securityMatcher. Например, если не хочется, чтобы цепочка фильтров безопасности реагировала на запросы на получение файлов из пути /js, то это можно сделать следующим образом:
      http.securityMatcher(new NegatedRequestMatcher(new AntPathRequestMatcher("/js/**")))
      Правила фильтрации можно комбинировать при помощи AndRequestMatcher, OrRequestMatcher и т.д.
      Второй вариант - позволить цепочке фильтров обрабатывать только запросы к какому-то конкретному подпути:
      http.securityMatcher(new AntPathRequestMatcher("/api/**"))
      .requestMatchers("/**").permitAll() - это правила авторизации, цепочка фильтров безопасности всё равно обрабатывает эти запросы.

  • @user-em8fj5hn9q
    @user-em8fj5hn9q Před 11 měsíci

    Спасибо за полезное видео! Вопрос как настроить ssl для этого примера, или как отключить его в данном проекте?

    • @shurik_codes
      @shurik_codes  Před 11 měsíci +1

      Для настройки SSL в application.yml есть параметры spring.server.ssl..., чтобы отключить SSL достаточно их удалить

  • @tami-he4mm
    @tami-he4mm Před 9 měsíci

    А зачем нужно использовать CSRF при JWT Аутентификации? я думал CSRF атаки возможны только при сессионной аутентификации

    • @shurik_codes
      @shurik_codes  Před 9 měsíci

      Дело не в использовании HTTP-сессий, а в использовании файлов куки для хранения сессионной информации, как это сделано в этом ролике - JWT хранится в куке и, более того, по факту представляет собой HTTP-сессию.
      CSRF-атаки возможны при использовании файлов куки для хранения сессионных данных, варианты атак я описывал в этой статье: alexkosarev.name/2023/07/15/spring-security-csrf/ и ролике czcams.com/video/LtvS0F04C2c/video.html

  • @andreinechaev9917
    @andreinechaev9917 Před 9 měsíci

    Как добавить csrf токен для POST,UPDATE,DELETE запросов? Можете подсказать где посмотреть материал для реализации другого handler'a?

    • @shurik_codes
      @shurik_codes  Před 9 měsíci

      Если честно, то я не понял вопроса, подробно CSRF я разбирал в этой статье: alexkosarev.name/2023/07/15/spring-security-csrf/ и ролике czcams.com/video/LtvS0F04C2c/video.html