JWT. Часть 1. Теория

Поделиться
HTML-код
  • Опубликовано: 21 сен 2024
  • Основные принципы работы JWT (Json Web Tokens)

Комментарии • 139

  • @АндрейСороковой-ю9ъ
    @АндрейСороковой-ю9ъ 3 года назад +20

    Круто объяснено! На пальцах, с картинками, все ясно )))

  • @АнтонВасильев-т2я
    @АнтонВасильев-т2я 6 лет назад +30

    Классный урок. Вот бы все так объясняли)

  • @alexstatsenko1809
    @alexstatsenko1809 Год назад +2

    Большое спасибо!! Я часа 2 читал что да как, не мог понять, а в видео все сразу стало ясно. Респект

  • @kinafermur
    @kinafermur 4 года назад +47

    на 1.5 отлично

  • @КарлЛьвович-д8э
    @КарлЛьвович-д8э 5 лет назад +9

    СПАСИБО ОГРОМНОЕ за разъяснение 🤝

  • @muborizDev
    @muborizDev 10 месяцев назад

    Илья умеет объяснять сложные темы, простыми словами!

  • @aleksandroff2757
    @aleksandroff2757 3 года назад +2

    Шикарно объяснил! Подписываюсь

  • @eugeneburdin704
    @eugeneburdin704 3 года назад +2

    Cпасибо ! Очень понятно!

  • @azizkudaikulov993
    @azizkudaikulov993 3 года назад +1

    Спасибо, очень нужно и интересно

  • @romansharpe1131
    @romansharpe1131 4 года назад +1

    Спасибо, очень классно все разъяснено

  • @BuAjoyib
    @BuAjoyib 2 года назад

    очень понятно! спасибо за труд!

  • @count_of_pizza
    @count_of_pizza 5 лет назад +1

    Спасибо за фильм, привет из Польши ;)

  • @andreikan4894
    @andreikan4894 2 года назад +2

    объясняете доходчиво! Советую смотреть на х2, очень тягучая манера говорить, а на ускоренном всё супер)

  • @valeriyaleksandrovich2707
    @valeriyaleksandrovich2707 Год назад

    Большое спасибо!! Отличное объяснение с наглядными схеами

  • @Anonimus_13
    @Anonimus_13 3 года назад +2

    Блэт, годный видос👍

  • @husankarimov7802
    @husankarimov7802 Год назад

    ЭТО ШЕДЕВР

  • @oleg_shulga
    @oleg_shulga Год назад

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

  • @sivkaburka1062
    @sivkaburka1062 2 года назад

    Досмотрел до конца

  • @IndexRTS
    @IndexRTS Год назад +3

    14:46 а с чего это токены которые были у хакера станут не корректными? Ведь речь идет что - при условии что не используется хранилище токенов.

    • @HyperTextTransferProtocol-l6m
      @HyperTextTransferProtocol-l6m Год назад

      Тот же вопрос, автор сам сказал что нет механизма отзыва токенов

  • @Костя-с5л8я
    @Костя-с5л8я 2 года назад

    Супер! Спасибо большое

  • @taran_dm
    @taran_dm 2 года назад

    Вот и пригодилось) Спасибо!

  • @Brometey
    @Brometey Год назад

    Все шикарно объяснено, единственный момент, причем тут такены

  • @Yornero
    @Yornero 3 года назад +2

    Неплохо объяснено, плюс минус все понятно

  • @smilesrg
    @smilesrg 3 года назад

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

  • @АсланКосшанов
    @АсланКосшанов 3 года назад

    Душевно объяснил, лайк и подписка сразу же таким пацанам

  • @TheTexPro
    @TheTexPro 3 года назад

    Спасибо большое!

  • @mirakmalsultanov3398
    @mirakmalsultanov3398 3 года назад

    супер, нет слов

  • @VladTsyb
    @VladTsyb 2 года назад

    Спасибо!

  • @Ana-el3gk
    @Ana-el3gk 2 года назад

    Thank you!

  • @BraentR
    @BraentR 2 года назад

    Спасибо

  • @alimahmoudmansour9681
    @alimahmoudmansour9681 2 года назад

    спасибо!

  • @mihrankhachatryan3693
    @mihrankhachatryan3693 3 года назад

    Respect!!!

  • @ОстапБендер-и6п
    @ОстапБендер-и6п 5 лет назад +20

    Не путайте Авторизацию и Аутентификацию!

    • @aleksandrkravtsov8727
      @aleksandrkravtsov8727 5 лет назад +11

      не будем!

    • @user-oh4xi2xb2d
      @user-oh4xi2xb2d 4 года назад

      @@aleksandrkravtsov8727 :)

    • @averv
      @averv 2 года назад

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

  • @blazheiko777
    @blazheiko777 3 года назад

    спасибо, классно.

  • @AdmAdm-ir3vv
    @AdmAdm-ir3vv 2 года назад +1

    Прошу прощения за тупость, но на 6:58 - Каким образом секретная подпись была "выдана" API-серверу?!
    1. Через клиента? Тогда клиент "знает" эту подпись?
    2. Взаимодействием серверов? Но ведь утверждается, что мы избегаем их взаимодействия?!
    И еще:
    3. Подпись вечная? Звучит плохо.
    4. Если подпись не вечная, тогда как она "освежается"?
    Понимаю, что туплю, но не понимаю где...

  • @ИльяСосновский-ъ7и
    @ИльяСосновский-ъ7и 6 лет назад +6

    Что-то не очень понятен финт на 7:00. Получается они все равно общаются между собой, раз делят ключ? Но ведь мы хотели избавиться от этой связи?

    • @jonnyradars
      @jonnyradars 4 года назад +4

      Похоже, что просто количество необходимой коммуникации снизилось существенно. С JWT серверам авторизации и апи нужно общаться не каждый запрос пользователя к апи, а только в момент смены пары токенов.

  • @bogdanbabitskiy3345
    @bogdanbabitskiy3345 5 лет назад +4

    Добрый день, у меня 2 вопроса:
    1) как лучше хранить refresh_token в mssql базе (В таблице юзера? И как хранить его дату истекания? То есть это должен быть какой то Json поле в таблице user`a и при получении access_token обновлять это поле всегда? Или можно как то подругому?)?
    2) как на клиенте узнать что просрочен access_token (нужно ли для этого делать доп запросы? Или просто если при запросе пришел 401 ответ, сделать запрос на сервер аунтификации и авторизации и получить новый?)
    Заранее спасибо, застрял на этих вопросах, хочу сделать как лучше.

    • @diperps4969
      @diperps4969 4 года назад

      2 отправь на клиент дополнительный заголовок, что срок годности токена истек

  • @IlkinAlibayli
    @IlkinAlibayli 3 года назад +1

    Объяснение нравится, спасибо.
    Только бы английские слова выговаривать по английски...)
    Токéны, Áпи

    • @ДмитроПрищепа-д3я
      @ДмитроПрищепа-д3я 3 года назад +2

      Нет, конечно же, в tokens явно не на второй слог ударение.

    • @sarbasov
      @sarbasov Год назад +2

      ​@@ДмитроПрищепа-д3я 8:25 это автор видео говорит токе́н

    • @404Negative
      @404Negative 6 месяцев назад

      обнаружен гуманитарий. уничтожить.

    • @IlkinAlibayli
      @IlkinAlibayli 6 месяцев назад

      @@404Negativeпшел ты)

  • @ВиталийПугач-к8ю
    @ВиталийПугач-к8ю 4 года назад +2

    Реализовываю у себя, но вот задался вопросом, если при новом логине выписываем новый рефреш , а старый оставляем валидным то старый протухнет как только выйдет его время жизни, до этого им можно будет пользоваться вполне. Если мы делаем все старые рефреши не валидными (удаляем их например), то если юзер зашел со второго устройства - первое соответственно вылогиниться по истечению своего access_token. Как лучше поддерживать два устройства?

  • @GMByteJavaTM
    @GMByteJavaTM 2 года назад +2

    15:01 - А как они станут автоматически невалидными, если сервер не знает что валидно, а что нет для конкретного пользователя, а знает только о том, что этот JWT был сгенерирован по определённому слову? Получается у него просто будут 2 валидных токена... не понял эту часть.

    • @centwor1on167
      @centwor1on167 Год назад +2

      Мне тоже это непонятно. Вы поняли уже?

    • @GMByteJavaTM
      @GMByteJavaTM Год назад

      @@centwor1on167 А, ну и ещё добавлю, не помню было ли это упомянуто в видео. Refresh токен обычно делают не JWT, а хранят именно на, допустим, сервере авторизаций, прямо где-то в базе, ну или на худой конец в памяти. Тут никаких противоречий нет, т.к. именно получение новых токенов в любом случае происходит где-то централизованно, а вот access-токены могут уже использоваться при обращении к разным серверам

  • @vasyadelyatunsky1816
    @vasyadelyatunsky1816 5 лет назад +1

    Это была песня из Безконечного лета в начале?

  • @ЕвгенийБорисов-е1ч
    @ЕвгенийБорисов-е1ч 3 года назад +1

    Обьясните нафига токен передавать в Bearer заголовке тоесть палить токен? Его же нельзя передовать?

    • @ДмитроПрищепа-д3я
      @ДмитроПрищепа-д3я 3 года назад

      Если его, по вашим словам, нельзя передавать, то как вы собираетесь его использовать?
      Либо передаете в Authentication хедере, либо как HTTP-only куки. Но передать придется в любом случае, без этого сервак вас не узнает

    • @ЕвгенийБорисов-е1ч
      @ЕвгенийБорисов-е1ч 3 года назад

      @@ДмитроПрищепа-д3я Скажи JWT существует потому что AJAX запросы не шифруються как HTTP? И bearer токен имеет двойное назначение как токен авторизации и токен для подписей данных?

    • @ДмитроПрищепа-д3я
      @ДмитроПрищепа-д3я 3 года назад +1

      @@ЕвгенийБорисов-е1ч JWT(как и другие авторизационные токены) существует потому, что в REST приложениях не хранится состояние пользователей, поэтому и все данные для аутентификации нужно передавать вместе с запросами(не совсем полная история, конечно, в целом токенная атуентификация существует потому, что очень часто она удобнее, чем сессии).
      Кстати, HTTP не шифруется вообще, это просто протокол прикладного уровня над TCP. Шифруется уже расширенная его версия - HTTPS. К токенам это отношения не имеет.
      Bearer - тип схемы аутентификации в Authorization заголовке запроса, который означает, что после него идет такой токен, что подходит для доступа к ресурсам, защищенным по OAuth 2.0. Упрощенно говоря это значит, что такого токена полностью достаточно для получения наиболее полного доступа к ресурсу(наличие любого криптографического ключа у носителя токена не проверяется). Более подробно читать, собственно, спецификацию, а конкретно RFC 6750(datatracker.ietf.org/doc/html/rfc6750). Таким образом видно, что JWT полностью соответствует этой спецификации.
      Назначение Bearer токена - исключительно авторизация, по крайней мере в изначальном его смысле. Сами данные при этом могут, в зависимости от апи, передаваться в любом желаемом виде, хоть сырыми как query-параметры или в теле, хоть асимметрично шифрованными/как-то подписанными. Токен(и конкретно JWT тоже) к ним отношения не имеет, лишь к аутентификации пользователя, сделавшего запрос.

    • @ЕвгенийБорисов-е1ч
      @ЕвгенийБорисов-е1ч 3 года назад

      @@ДмитроПрищепа-д3я Ну вот я и слышал постоянно про JWT авторизацию и Bearer токен и у меня все смешалось и я запутался ну теперь чуть яснее

  • @mister-ace
    @mister-ace 3 года назад

    Ответьте пожалуйста, мне все ясно. Однако я не могу понять, возможно ли так авторизовать юзера в браузере? Через обычную форму , а там уже отправить ajax запрос на api?

  • @sergeyjacobi
    @sergeyjacobi 3 года назад +2

    каким образм refresh токен хакера, после перелогина настоящего пользователя станет невалидным??

    • @georgemanlove7411
      @georgemanlove7411 3 года назад

      Пользователю будет выдана новая пара access-refresh токенов

    • @nubosk
      @nubosk 3 года назад +3

      @@georgemanlove7411 разве это обязательно должно убивать предыдущие пары? А как тогда держать авторизацию на нескольких устройствах? Ведь логин в одном будет убивать другой.

    • @user-varmat
      @user-varmat 3 года назад

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

    • @ВалежникНаш-с3э
      @ВалежникНаш-с3э 3 года назад +1

      @@user-varmat Вот я тоже об этом подумал. А если например еще и поменял e-mail или телефон.

  • @smilesrg
    @smilesrg 3 года назад +1

    Илья, фон у тебя грустный и печальный )))

  • @gen7891
    @gen7891 2 года назад +1

    Большая плотность информации. Вроде все должно быть понятно с первого раза, но кажется надо смотреть 2**n раз. Для объяснения протоколов юзайте диаграммы сиквенсов, не надо велосипедов.

  • @aditca5224
    @aditca5224 2 года назад

    ничего неясно, надо по шагам. Запросила аксес тоткен и рефреш токен первы раз - откуда они изначально берутся? потом сохранили их где, если не в куки? потом обращаемся к серверу ресруса и предъявляем ему что? аксес токен? Где таймер идет? на каком сервере? вроде что-то рассказали, но понимния стлько же, сколько т документации.

  • @GlebMtb
    @GlebMtb 2 года назад

    не хватило информации что значит проверить корректность этих данных на основании подписи 7:40

  • @КириллГаврилов-з9г

    а вот у меня такой вопрос по поводу JWT: Допустим мы получим ключ JWT и у нас будет иметься начальная часть(до шифрования) и конечная часть(шифрованная секретным словом). Разве невозможно подобрать секретное слово таким образом, это ведь как уравнение с одной неизвестной?

  • @ОлексійМоренець
    @ОлексійМоренець 7 месяцев назад +1

    gvt??? or JWT? %)

  • @sergii.golota
    @sergii.golota 2 года назад

    как злоумышленник сможет украсть access_token если мы к примеру используем HTTPS соединения?

  • @dmytro_bro
    @dmytro_bro Год назад +1

    14:20 Каким образом рефреш токен который заполучил хакер становится не валидным? А что если честный пользователь логинится с двух устройств?

    • @dmytro_bro
      @dmytro_bro Год назад +1

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

    • @deadorIT
      @deadorIT Год назад +1

      Тоже не понял. Он по логике с длинной жизнью, когда протухает акссес, рефреш генерит заново пару.

    • @valeron_1337
      @valeron_1337 Год назад

      Но ведь у хакера останется не валидный рефреш токен. Он как минимум сможет постоянно пытаться его рефрешить что будет всегда сбивать все рефреш токены для реального пользователя. Да и вообще, для этого и красть то не нужно ничего. Зная userId пользователя можно генерить не валидные токены, отслылать их на ендпоинт для рефреша и тем самым сбивать все токены реально пользователя. Вот такое западло получается можно делать.
      Как-то не понятно с этим моментом.

    • @dmytro_bro
      @dmytro_bro Год назад +2

      @@valeron_1337 1) Юзер логинится.
      2) Мы создаем аксес токен и рефреш токен
      3) сохраняем рефреш токен (токен, юзер айди, флаг использования, и время действия)
      4) возвращаем токены
      1) происходит рефреш запрос от юзера.
      2) проверяем наличие токена в бд, проверяем что токен не использовался, проверяем что токен не протух.
      Если токен валидный то заменяем флаг на использован и выдаём новую пару токенов.
      Если токен не найден в бд или он просрочен то возвращаем 401.
      Если токен был использован, то скорее всего он был скомпрометирован и мы удаляем все рефреш токены (или заносим в бан, к примеру) И теперь единственный способ получить рефреш токен это авторизация.
      Так как мы удалили токены то колизия не произойдет повторно.

    • @valeron_1337
      @valeron_1337 Год назад

      @@dmytro_bro Большое спасибо за разъяснение. Звучит надежно. Поделитесь пожалуйста ресурсом откуда почерпнули данное решение, если не сами до него дошли.
      Я просто сейчас посмотрел третий урок (Сервер) и исходя из него, описанный сценарий вполне возможен. То есть, получается как вы и написали в своем первом комментарии, сервер будет трактовать перелогиненого пользователя и хакера как две сессии на разных устройствах.

  • @vladislav_pikiner
    @vladislav_pikiner 2 года назад

    на 1.75 то что нужно)

  • @VitalyP_Dev
    @VitalyP_Dev 3 года назад

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

    • @JavaScriptNinja
      @JavaScriptNinja  3 года назад

      Зачем кодировать данные? Вы путаете подпись которая гарантирует неизменность данных с их шифрованием

  • @redirex7770
    @redirex7770 2 года назад

    такЕн :DDDD

  • @SmiteVils
    @SmiteVils 6 лет назад +4

    JWT не зашло? Вижу давно видео нет

  • @ОлегЕвсеев-н9ъ
    @ОлегЕвсеев-н9ъ 5 лет назад

    ну а если только access token и deviceid?

  • @orkhannabiev9192
    @orkhannabiev9192 5 лет назад

    красиво

  • @vitaliy.artyukh
    @vitaliy.artyukh 7 лет назад +1

    почему бы не держать авторизацию и API на одном сервере? тогда бы не понадобилось подтверждение кто есть кто.

    • @JavaScriptNinja
      @JavaScriptNinja  7 лет назад +5

      Потому что проекты разрастаются. Микросервисная архитектура и т.п. более того, у вас может быть сценарий что пользователь авторизуется на одном сервере, а потом (допустим) балансировщик нагрузки кидает его на другой

    • @владимирсенцов-р1ю
      @владимирсенцов-р1ю 5 лет назад +1

      Ну можно. Но тогда придеться сессию делать распределенную. И прочие не очень удобные вещи.

  • @kaflan-kun
    @kaflan-kun 7 лет назад

    Оукей, а как в подобной системе делать полинги елси надо?

    • @vrazovsky
      @vrazovsky 4 года назад

      А кто-мешает сделать сервиc-метод "Ping" в который не надо передавать токен?

  • @МаксимСеливанов-ь6н

    Дикция и подача конечно ппц, но в целом норм видосик, thx

    • @smartliga8623
      @smartliga8623 5 лет назад +12

      Этот парень шарит. Похуй на дикцию. Его рисунки перекрывают все минусы.

    • @MrGavr007
      @MrGavr007 4 года назад +2

      да уж. пусть лучше статьи пишет

  • @ii3246
    @ii3246 2 года назад

    протухший токен, улыбнуло.))))

  • @ДенисДенисов-п8о
    @ДенисДенисов-п8о 4 года назад +3

    все отлично, но токЕн...))

  • @ivansidorov5
    @ivansidorov5 6 лет назад

    Народ, я туплю что-то подскажите, вот отправили мы запрос FETCH через JS на сервер, сервер вернул нам куку, нашему AJAXу, эта кука установится в браузер?

  • @haminidzinanusubalieva6622
    @haminidzinanusubalieva6622 Год назад +1

    такены...

  • @RagazzoKZ
    @RagazzoKZ 7 лет назад

    Не слышал про JWT. А где это используется? Как-то непонятно. Даже в русской википедии нет статьи об этом.

  • @ДилэймНиколсон
    @ДилэймНиколсон 6 лет назад +2

    JWT читается как "джот". Очень уж ваш "ДжейВиТи" слух режет)
    А ударение в слове тОкен на О :)
    А так клёвый урок, спасибо

    • @musoverda5500
      @musoverda5500 6 лет назад +3

      Вас жестоко обманули насчет "читается" ))
      читается просто - "j - w - t" (см. букварь англ. языка)

    • @ДилэймНиколсон
      @ДилэймНиколсон 6 лет назад

      С чего бы это?!
      en.wikipedia.org/wiki/JSON_Web_Token

    • @musoverda5500
      @musoverda5500 6 лет назад +3

      не знаю как насчет Википедии ...
      Но вот нативный американец -
      ruclips.net/video/7nafaH9SddU/видео.html
      А вот дамочка из официального Yuotube-канала фирмы Auth0
      - ruclips.net/video/J-9Q469kyJc/видео.html
      - ruclips.net/video/XQnojzN4GSY/видео.html

    • @musoverda5500
      @musoverda5500 6 лет назад +2

      вот еще )
      - ruclips.net/video/g21uHNIIewM/видео.html

    • @ДилэймНиколсон
      @ДилэймНиколсон 6 лет назад +1

      Просто не все в теме, как правильно :)
      www.quora.com/Why-is-JSON-Web-Token-JWT-pronounced-jot
      В целом, можно произносить J W T как "Джей Даблъю Ти", но это немного коряво, ибо принято "джот". Но уж точно не "Джей Ви Ти"

  • @Ooshka
    @Ooshka 5 лет назад

    Помогите:
    С клиента ловим токен, как узнать на node js (express) сколько осталось время жизни токена?

    • @JavaScriptNinja
      @JavaScriptNinja  5 лет назад +1

      Поле iat содержит время выдачи токена

    • @Ooshka
      @Ooshka 5 лет назад

      @@JavaScriptNinja спасибо :) главное что ответили)

  • @rusnipyzda195
    @rusnipyzda195 3 года назад

    x1.5

  • @MrReflection540
    @MrReflection540 Год назад

    За 15 минут так то можно кучу всего наворотить =\

  • @denpol9956
    @denpol9956 3 года назад

    норм хромакей

  • @tee_zed
    @tee_zed 3 года назад

    за 15 минут можно что угодно сделать

  • @perfectogamer3349
    @perfectogamer3349 2 года назад

    ТокЕны, уши режет.

  • @gagogoga794
    @gagogoga794 Год назад

    Очень полезно! Спасибо! Жаль что ты с Украины и сошел с ума, преподаешь на диалекте!

    • @MrRomanvideo
      @MrRomanvideo Месяц назад

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

  • @alex330k47
    @alex330k47 3 года назад +1

    Ну выкиньте уже нвконец то эти совковые шкафы

    • @JavaScriptNinja
      @JavaScriptNinja  3 года назад +1

      Спасибо за заботу :) но родителям виднее чего они хотят

  • @olegperov6395
    @olegperov6395 6 лет назад

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

    • @JavaScriptNinja
      @JavaScriptNinja  6 лет назад +5

      Ключ который хранится на сервере? Да, полно людей так делает, успехов в подборе ключа даже в 12 символов

    • @eternal_wanderer_ru
      @eternal_wanderer_ru 5 лет назад +1

      А rsa ключик подберешь?))

    • @404Negative
      @404Negative Год назад

      поняли, ребята. просто ключ подберите. и все деньги мира ваши.

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 года назад

    Спасибо!

  • @Kreator321RG
    @Kreator321RG 7 лет назад

    Спасибо!