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

Sdílet
Vložit
  • čas přidán 2. 07. 2023
  • JWT-аутентификация - это токен-аутентификация с использованием ключей доступа сериализованных в формате JWT - JSON Web Token.
    В этом ролике я продемонстрирую реализацию получения и обновления ключей доступа, аутентификации при их помощи, а так же блокировку ключей.
    Репозиторий проекта: github.com/alex-kosarev/sprin...
    #java #jwt #springsecurity
    Мой сайт: alexkosarev.name/
    Паблик в VK: public218833461
    Канал в Telegram: t.me/+TZCuO38vG3oqu_Jq
    Стать доном: donut/shurik.codes
    Донаты в Boosty: boosty.to/akosarev/purchase/1...
    Донаты в Tinkoff: www.tinkoff.ru/cf/4PEOiVCZQuS

Komentáře • 105

  • @momintoxtaxojayev5581
    @momintoxtaxojayev5581 Před 12 dny +1

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

  • @pavelshackih
    @pavelshackih Před 6 měsíci +9

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

  • @user-cx2wb3zm7s
    @user-cx2wb3zm7s Před 19 dny +1

    Спасибо за Ваш труд, очень жду новых видео от Вас

  • @Jahikka
    @Jahikka Před 7 měsíci +5

    Три и дня (без "и три ночи :D") разбирался что к чему, подходя к теме без углубленных знаний Spring Security (максимум, знал про контекст безопасности, роутинг и какие-то дефолтные настройки, да и всё касается секьюрности через сессии, а не токены), без фундаментальных знаний о JWT, но всё-таки всё получилось, благодаря Вам) Очень много различных статей на тему jwt, в которых или суть до конца не раскрывается и непонятно как работать, или делается грязно и неправильно с учетом той же секьюрности.
    Было сложно, интересно, местами непонятно и запутанно (к середине я уже перестал понимать, где я, кто я и что за что отвечает и как коммуницирует друг с другом), но в конце, просмотрев все классы по порядку, опираясь на конфигурер, стало гораздо понятнее) Спасибо большое, очень понравилось объяснение и разъянение, слушать приятно, очень жаль, что не наткнулся на канал раньше) Присмотрел для себя много тем, в которые хотелось бы углубиться)

  • @kowalski1888
    @kowalski1888 Před 4 měsíci +3

    Огромное спасибо за твой труд! Не смотря на то, что уроки действительно получаются долгими и к концу в голове каша из фильтров и токенов, я бы с удовольствием потратил ещё 10-15 минут на просмотр "разбора полётов" по материалу. Хотелось бы услышать хотя бы вкраце что для чего нужно и алгоритм взаимодействия всего этого между собой. Ещё раз спасибо!!

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6h Před rokem +3

    Очень круто, спасибо!

  • @vla-zav
    @vla-zav Před rokem +3

    Очень годно!👏

  • @krab9512
    @krab9512 Před rokem +3

    Спасибо за видео!

  • @Overlap_ed
    @Overlap_ed Před 9 měsíci +1

    ОГРОМНОЕ СПАСИБО за ролик, очень помог!)

  • @vip51000
    @vip51000 Před rokem +2

    Какой же ты красавчик!

  • @ji1ja
    @ji1ja Před 5 měsíci +1

    Бомба пушка просто

  • @rainrainov4495
    @rainrainov4495 Před 3 měsíci +1

    Комментарий в поддержку канала. Так держать.

  • @veniaminsamoylov1617
    @veniaminsamoylov1617 Před 2 měsíci +1

    Спасибо большое информации много сразу не все понял, но лучше объяснить невозможно. Спасибо за возможность посмотреть код потому что пересматривать буду точно.

  • @stik971
    @stik971 Před měsícem

    с этими var мы все дальше и дальше от бога=)

  • @alexkoren7648
    @alexkoren7648 Před 5 měsíci +1

    Контент огонь 👍 но роликов типо образного понимания много, а как правильно делать мало кто показывает. Лично мое мнение, что те кто в курсах вскользь может и глянут, а тем кто учиться вот как раз не будет хватать той инфы.

  • @BabaykaMoscow
    @BabaykaMoscow Před rokem +2

    Это, пожалуй, самое лучшее видео из вообще всех, что я видел по части реализации JWT-авторизации. Было бы круто, если бы было показано как и /login закастомайзить вместо использования стандартной бейсик-аутентификации, но концептуально это и так понятно как сделать. Вы - огонь! Спасибо!

    • @shurik_codes
      @shurik_codes  Před rokem

      Про аутентификацию при помощи формы есть в следующем видео)

    • @BabaykaMoscow
      @BabaykaMoscow Před rokem

      @@shurik_codes посмотрю, спасибо! Есть в планах аутентификация с помощью нескольких провайдеров? Например, в базе через jdbc, а если не вышло, через *** (например, ldap).

    • @shurik_codes
      @shurik_codes  Před rokem +3

      Так это делается при помощи нескольких вызовов метода authenticationProvider() у HttpSecurity) Можно сколько угодно провайдеров добавить таким образом. Отдельно ролика с демонстрацией этого, возможно, не будет, но будет ролик, посвящённый детальной настройке цепочки фильтров безопасности.

    • @BabaykaMoscow
      @BabaykaMoscow Před rokem

      @@shurik_codes супер!

  • @trymad693
    @trymad693 Před 9 měsíci +2

    Спасибо за то что делаете ролики по спрингу, на русскоязычном ютубе актуальных и одновременно качественных материалов как у вас достаточно мало. Еще вопрос, вы сказали что не используете lombok на практике, есть ли какие либо минусы в его использовании, из за которых им лучше пренебречь, или это лишь вопрос предпочтений?

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

      В большей степени это вопрос предпочтений

  • @ZamalSpace
    @ZamalSpace Před 9 měsíci +1

    А я бы не против и хоть 10-ти часовой ролик смотреть. Я к тому, ты говоришь, что если делать все правильно с точки зрения архитектуры, то ролик будет дольше по времени. В любом случае спасибо за труд и за то что делишься!

  • @user-hm3zr4vf4o
    @user-hm3zr4vf4o Před 2 dny +1

    на 38:15 при отправке пост запроса ловлю вечный 401, делал все в точности как автор, можно быть кто-то сталкивался с подобным? не могу понять в чем проблема. В базе данных все есть, но запрос не проходит

  • @svrd-tech
    @svrd-tech Před 10 měsíci +1

    Спасибо за ролик! В самом начале была оговорка про большое количество примеров где аутентификация делается через контроллер (в нем ИМХО как будто бы ощущается бОльший контроль над ситуацией), но так действительно выглядит каноничнее) Но тут появился такой вопрос - что делать, если у нас например аутентификация двухфакторная? Допустим, при получении логина-пароля мы генерим код, идем в редис и складываем ТОТР, который ожидаем в следующем запросе, на который уже и возвращаем токены. С контроллером как будто бы понятно как это сделать, а как быть без него?

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

      Есть два варианта реализации:
      1. Передавать второй пароль в одном запросе с логином и основным паролем. Это потребует изменения в фильтре аутентификации, новой реализации Authentication и AuthenticationProvider
      2. Если хочется всё же передавать второй фактор отдельным запросом, то потребуются два дополнительных фильтра: первый будет проверять подтверждённость второго фактора (в файлах куки, сессии и т.д.) и при её отсутствии перенаправлять на страницу ввода второго фактора, второй будет уже запускать проверку второго фактора при отправке запроса из формы ввода второго фактора.
      Кстати, сохранять одноразовый пароль в редис нет смысла, вычисление пароля не такая уж и ресурсоёмкая операция.
      Ролик про двухфакторную аутентификацию будет.

    • @svrd-tech
      @svrd-tech Před 10 měsíci

      @@shurik_codes спасибо!

  • @user-jc6ku1jk2c
    @user-jc6ku1jk2c Před 4 měsíci +1

    Привет! Огромное спасибо за видео, очень круто, очень мало русскоязычного материала в таком качестве. Подскажи пожалуйста, данный способ реализации ведь не подходит для реактивщины ? Будет ли видео с разбором реализации аутентификации и авторизации в WebFlux ?

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

      Да, демонстрируется вариант для приложений на основе Servlet API, для реактивщины ролики ещё впереди

  • @user-kk5xm9ph1g
    @user-kk5xm9ph1g Před 6 měsíci

    Спасибо за классное видео! Хотелось узнать, почему выбор пал на использование nimbus jose jwt ? В Spring есть Spring Authorization Server (раньше был Spring Security OAuth). По мне лучше использовать spring стек, а если есть проблемы, то только тогда переходить на сторонние библиотеки. Может есть какие-то проблемы с Spring Authorization Server ?

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

      В данном ролике демонстрируется аутентификация при помощи JWT-токенов в чистом виде, вне контекста OAuth/OIDC, поэтому не Spring Authorization Server.

  • @paradiesd
    @paradiesd Před rokem +2

    Спасибо, видео очень крутое получилось, ты точно не зря старался
    Думаю, что люди будут даже через много времени будут обраться к этому видео
    Подскажи пожалуйста, keycloak как я понимаю в мое приложение отправляет jwtToken, и из него строиться Authentication, как вмешаться в этот процесс создания ? Чтобы допустим изменить что-нибудь
    Я подумал, что это что-то похожее на твой UserDetailsService, но не уверен

    • @shurik_codes
      @shurik_codes  Před rokem +1

      В ролике про Keycloak я упоминал JwtAuthenticationConverter, этот класс можно расширить и изменить логику преобразования Jwt в AbstractAuthenticationToken (это для ресурс-сервера). Впрочем, исходный JWT всегда доступен через JwtAuthenticationToken.getPrincipal().
      Для OAuth-логина логику можно изменять, например, в OAuth2UserService, что я тоже показывал в том же ролике.

    • @paradiesd
      @paradiesd Před rokem

      @@shurik_codes спасибо

  • @tami-he4mm
    @tami-he4mm Před 7 měsíci +1

    1. 1:07:32 Вопрос, а почему надо давать роли для refresh-а token-а, почему бы не сделать чтобы все могли делать refresh? (и тоже самое с JWT_LOGOUT, почему для этих действии нужны роли)
    2. Почему ты не сгенерировал новый refresh token?
    3. Почему ты не используешь JPA?
    4. Почему ты добавляешь свои кастомные фильтры после ExceptionTranslationFilter или ты просто первый попавшийся на ум фильтр вбил?

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

      1. Чтобы только refresh-токены могли управлять сессией. Refresh-токены долгоживущие. Они используются реже, чем access-токены, и их (теоретически) сложнее скомпроментировать. Если access-токены будут иметь возможность продлевать сессию, то это может быть потенциальной уязвимостью.
      2. Забыл
      3. Потому что на практике редко его использую
      4. Чтобы ExceptionTranslationFilter мог обрабатывать исключения

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

      @@shurik_codes а JPA чем хуже? медленнее?

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

    Добрый день, после просмотра видео появилось несколько вопросов:
    1. В каких случаях может использоваться logout? Как я понял, запрос на логаут отправляется со стороны клиента после выполнения refresh для удаления старых токенов. Исходя из других источников, в случае обновления токенов, возвращается как access, так и refresh, поэтому старый refresh токен должен перестать функционировать.
    2. В некоторых полях вы указывали стандартную реализацию как Object::toString. Что именно будет происходить, если не присвоить такой переменной другой объект?

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

      1. В моей логике refresh-токен может выдать только новый access-токен, но не refresh. Тем не менее, JTI у всех их должен быть один, и по нему должна быть возможность заблокировать все токены разом на случай, если какой-то токен был скомпроментирован.
      2. Просто возвращает обычное строковое представление

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

      Огромное спасибо!@@shurik_codes

  • @greenstar3583
    @greenstar3583 Před 10 měsíci

    Здравствуйте. Прежде всего большое спасибо за отличное видео.a у меня есть вопрос. я отправил запрос к API "/manager.html" с токеном "Bearer". и это сработало. Но это сработало, даже если я сделал запрос к этому API с токеном «Basic». Должны ли мы исправить эту часть самостоятельно? или я что-то пропустил? Я думаю, что «BasicAuthenticationFilter» делает это.

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

      В целом в таком проведении нет ничего страшного, но если есть желание жёстко требовать аутентификацию по помощи токена, то да, это можно сделать несколькими способами. Например, Basic-аутентификацию вынести в отдельную цепочку фильтров безопасности или в права пользователя внести признак аутентифицированности по токену, а затем проверять доступ по нему

  • @ms_shifu7047
    @ms_shifu7047 Před 3 měsíci

    передавать authorities/permission в jwt токене это стандартная практика? т.к. их может быть 100 или 200 шт. и в этом слуае размер jwt токена сильно увеличится или это норм?

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

      Вполне стандартная практика, но если полномочий/ролей сильно много, то в сервисе авторизации нужно предоставлять отдельный эндпоинт для получения списка полномочий пользователя, аналогично userinfo-эндпоинту из OIDC.

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6h Před rokem +1

    Можно вопрос? Как можно было бы сделать: я реализую resource server (перехожу со старой версии где сервер через наследование ResourceServerAdapter). Для проверки подписи я использую публичный ключ с auth сервера /oauth/token_key. Но он возвращает json {"alg": "", "value": "публичный ключ в формате PEM"}. Стандартная история с jwk-set-uri параметром в конфиге, где по идее должны возвращаться данные по публичному ключу, ругается что у меня в /oauth/token_key нет keys=). Json не содержит обязательных полей Есть ли стандартные решения этой проблемы (какой-нибуть декодер или провайдер для переопределения)? Если возможность не городить велосипеды ?)))

    • @shurik_codes
      @shurik_codes  Před rokem

      Вот сходу не скажу, надо смотреть, но обычно есть точки внедрения

    • @user-iu6yz6ck6h
      @user-iu6yz6ck6h Před rokem

      @@shurik_codes По идее они должны быть ( но пока не нашел

    • @shurik_codes
      @shurik_codes  Před rokem +1

      Можешь скинуть стек-трейс в Telegram или в VK?

  • @user-rf8mq7cf7y
    @user-rf8mq7cf7y Před 5 měsíci

    Привет, а я бы хотел уточнить, получается сначала юзер получает userpass аутентификацию, которая даёт получить токены, но каким образом дальше такой тип аутентификации перекрывается pre authenticated токеном?

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

      Basic-аутентификация игнорируется при использовании JWT, т.к. на момент получения запроса фильтром Basic-аутентификации пользователь уже аутентифицирован, т.к. фильтр JWT-аутентификации в цепочке фильтров безопасности располагается перед фильтром Basic-аутентификации

  • @Jahikka
    @Jahikka Před 7 měsíci

    Добрый день! Возник вопрос, откуда берутся access-token-key и refresh-token-key в application.yml? Где они генерируются или по какому алгоритму?

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

      Я их сгенерировал при помощи OctetSequenceKeyGenerator из JOSE-JWT

    • @Jahikka
      @Jahikka Před 7 měsíci

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

  • @alifka6815
    @alifka6815 Před 4 měsíci

    Доброго времени суток! А почему на практике не пользуетесь Lombok-ом если не секрет))?

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

      @Data мне заменили record, остальное не особо актуально для меня

    • @rainrainov4495
      @rainrainov4495 Před 3 měsíci

      @@shurik_codes Для видеоуроков Lombok самое то. Можно часть конструкторов, геттеров с сеттерами и логгеры убрать. А то куче текста сложней сориентироваться.

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

    Почему использовать substring правильнее, чем replace?

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

      Используется меньше ресурсов:
      substring - вычисляется длина текущей строки и целевой подстроки и создаётся новый массив, содержащий байты новой строки
      replace - вычисляется длина текущей, заменяемой и заменяющей строк, производится поиск позиций всех заменяемых подстрок в текущей строке, вычисляется размер итоговой строки, создаётся массив байтов итоговой строки, выполняется итеративное копирование символов из текущей строки в массив байт итоговой строки, создаётся итоговая строка

  • @poleg75
    @poleg75 Před 2 měsíci

    У меня вопрос про эту строку в RequestJwtTokensFilter:
    if (this.securityContextRepository.containsContext(request))
    То есть получается что request должен содержать в себе контекст безопасности как атрибут.
    Но откуда он там берется? Кто его устанавливает? Где ранее происходит request.setAttribute() ?
    Вообще не очень понятен этот момент.
    Ранее BasicAuthenticationFilter положил контекст безопасности в SecurityContextHolder.
    А как код в фильтре его достает?

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

      Контекст безопасности появляется на ранних этапах обработки запроса, а информация о пользователе в контексте появляется при обработке запроса фильтром аутентификации.

    • @poleg75
      @poleg75 Před 2 měsíci

      @@shurik_codes Спасибо. А почему используется именно RequestAttributeSecurityContextRepository? Можно же использовать context = SecurityContextHolder.getContext() вместо context = this.securityContextRepository.loadDeferredContext(request).get() и все будет работать. Ну у меня по крайней мере работает )

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

    а как ты делаешь post request на /jwt/tokens, я имею ввиду откуда ты взял этот токен в Authroization: Basic {token}??

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

      Не совсем понял вопроса. Данный запрос обрабатывается фильтром RequestJwtTokensFilter, используется Basic-аутентификация, в которой токен - это Base64-кодированная строка, содержащая логин и пароль пользователя

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

      @@shurik_codes 38:33 к примеру здесь, я здесь вижу только POST request с header-ом Authorization Basic {и какой-то токен (откуда этот токен?)}, я просто запутался и не понимаю как авторизоваться

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

      Логин/пароль можно подсмотреть в этом файле: github.com/alex-kosarev/spring-security-jwt/blob/main/src/main/resources/data.sql
      Токен, как я уже сказал, при Basic-аутентификации, вычисляется при помощи кодирования логина и пароля в формате Base64:
      Base64.getEncoder().encodeToString("j.jameson:password".getBytes(StandardCharsets.UTF_8)), получается ai5qYW1lc29uOnBhc3N3b3Jk
      в JS это можно сделать при помощи функции btoa("j.jameson:password"), например, ну или любым онлайн-сервисом

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

      @@shurik_codes понял спасибо большое, а можно узнать почему именно таким способом?

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

      @@tami-he4mm стандартный способ аутентификации при помощи логина/пароля

  • @oopsoops9040
    @oopsoops9040 Před rokem +1

    Дамблдор 🧙‍♂, ты ли это?) Для работы на джуна я должен это всё так же знать?

    • @shurik_codes
      @shurik_codes  Před rokem +3

      Отнюдь, для джуна [бекенд-разработки] на мой взгляд достаточно знать Java (Kotlin, Groovy, нужное подчеркнуть), принципы ООП, базовые структуры данных и алгоритмы, SQL и базово какой-нибудь фреймворк: Spring, Jakarta EE, Quarkus, Micronaut, Helidon. Не глубоко, но достаточно, чтобы написать простое приложение.

    • @rainrainov4495
      @rainrainov4495 Před 3 měsíci

      @@shurik_codes получается в портфолио с проектами не нужно заморачиватся с добавлением spring security? Без образцов написанного кода резюме как понимаю вообще пропускают и шлют отказы.

  • @explo9087
    @explo9087 Před 2 měsíci

    Добрый день. Такое ощущение, что я пропускаю момент в видео получения токена при первичной ацтентификации. Т.е. когда пользователь вводит пароль и логин а в ответ получает токены. Может я непраивльно понимаю как должен протекать весь процесс работы через токены? 1.Пользовательский ввод пароля и логина. 2,В ответ получение токена. 3,Сохранение его на клиенте. 4,Дальнейшие запросы через это токен. Подскажите, плиз

  • @Leon-do8tf
    @Leon-do8tf Před 4 měsíci

    Это всё великолепно. И я выражаю Вам огромную благодарность за вашу работу. Но я не могу взять в толк: для Rest приложения подобная аутентификация применима или нет? если да, то как?

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

      Получить ключи доступа при помощи RequestJwtTokens, в дальнейших запросах передавать ключ доступа в заголовке Authorizatin: Bearer ...

    • @Leon-do8tf
      @Leon-do8tf Před 4 měsíci

      ​@@shurik_codes Возможно глупо говорить что у Вас нет такого класса, но я честно не понимаю из чего мне получить что-то типа authenticateAndGenerateTokens(login, password) в своём рест контроллере. Я так понимаю что этим занимется TokenAuthenticationClientDetailsService и он возвращает public UserDetails loadUserDetails(PreAuthenticatedAuthenticationToken authenticationToken) и дальше я в тупике...

    • @Leon-do8tf
      @Leon-do8tf Před 4 měsíci

      ​@@shurik_codes
      POST localhost:8080/jwt/tokens
      Authorization: Basic пожалуйста прокомментируйте что тут за набор символов на минуте 38:42

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

      В первом запросе для получения токенов - Basic-аутентификация с логином/паролем в Base64, в ответ приходит JSON содержащий в себе ключи доступа. Второй запрос уже демонстрирует Bearer-аутентификацию с ключом доступа

    • @Leon-do8tf
      @Leon-do8tf Před 4 měsíci

      @@shurik_codes Спасибо

  • @user-ub5yg5sf6z
    @user-ub5yg5sf6z Před měsícem

    А как у вас удаляются заблокированные просроченные токены из БД, чтобы они не скапливались?

    • @shurik_codes
      @shurik_codes  Před měsícem

      Это несложно реализовать при помощи заданий по расписанию (@Scheduled)

  • @explo9087
    @explo9087 Před 2 měsíci

    28:54 мы выбрасываем ошибку AccessDeniedExeption() А при каких обстоятельсвах она выбрасывается? Просто если неправильные пароль и имя, у меня в фильтр даже не заходит и сразу выдается ошибка 40. При правильной паре имя пароль выдается токен. В другом случае выполняется цепочка фильтров дальше. А как вызвать ошибку из фильтра?

    • @poleg75
      @poleg75 Před 2 měsíci

      Если в запросе не передавать заголовок Authorization, то будет.

    • @explo9087
      @explo9087 Před 2 měsíci

      @@poleg75 спасибо. попробую

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

    я сперва ничего не понял, а потом кааак понял.

  • @69ultrapotato
    @69ultrapotato Před 4 měsíci

    Не было идеи запизать видос по тестам с спринг секьюрити?

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

      Возможно, стоит записать

    • @rainrainov4495
      @rainrainov4495 Před 3 měsíci

      @@shurik_codes Да стоит. Поверхностной информации в ютубе много. А у вас все более углубленно. А с поверхностными знаниями к сожалению трудно в IT пробиться. Кроме того у вас самая актуальная информация в русскоязычном варианте.

  • @sergeys7134
    @sergeys7134 Před 6 měsíci +1

    Неужели нельзя все это сконфигурировать в application.yml и не писать столько кода?

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

      Чтобы что-то сконфигурировать в application.yml, нужно чтобы это что-то было

  • @user-fl4yw1cr7d
    @user-fl4yw1cr7d Před rokem

    Интересно, но ОЧЕНЬ замороженная схема получается. Действительно ли это необходимо

    • @shurik_codes
      @shurik_codes  Před rokem

      А в чём конкретно замороченная?

    • @user-fl4yw1cr7d
      @user-fl4yw1cr7d Před rokem

      @@shurik_codes в создании сериализаторов, десериализаторов, фабрик по созданию токенов. Насколько это все необходимо не ясно, есть же гораздо проще библиотеки. Но да, там не будет энкрипт токен, но для какого уровня сервиса нужны такие токены?

    • @shurik_codes
      @shurik_codes  Před rokem +1

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

  • @valeriyatua
    @valeriyatua Před měsícem

    Спорный ролик. С одной стороны видно что подход отличается от того что у большинства видео по запросу "SpringBoot JWT" и производных, а с другой стороны возникает вопрос: "Для кого это видео?" Для новичков в Spring Boot появляется больше вопросов чем ответов. Для тех кто в теме это не нужно. Остается только вывод, что тут было показанно экспресс программирование. Пойду наверное ChatGPT опрашивать.

  • @user-xi1ur5bj6l
    @user-xi1ur5bj6l Před měsícem

    Очень сложный туториал, очень много чего не сказано, скорее всего из-за - ну это итак должно быть понятно. Приходится разбираться, копаться, с одной стороны полезно, с другой стороны, хотелось бы услышать больше комментариев, так как личные изыскания могут быть неверными.
    Лично я 18 минут ролика 3 рабочих дня изучал. Но может это моя такая пришибленность - хочется видеть всю картину в целом, чтобы было проще изменять частности.
    Даже вопросы типа: "а почему именно jose, а не другая библиотека?" требуют комментариев.

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

    Вместо того чтобы перезаписывать видеоролики из-за того что они долгие, почему просто не смонтируешь?

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

      а я так теперь и делаю

  • @dimkaddd7674
    @dimkaddd7674 Před měsícem

    Здравствуйте, а как сделать HTTPS соединение Мобильного приложения и Сервера, чтобы хакер не смог реверснуть Мобильный клиент и получить ключи шифрования?