Тёмный

JWT и Refresh токены в Golang 🚀На реальном примере 

Maksim Zhashkevych
Подписаться 28 тыс.
Просмотров 19 тыс.
50% 1

Опубликовано:

 

16 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 36   
@vic_shine
@vic_shine 3 года назад
Отличное объяснение, как обычно 👍 для полной картины - было бы хорошо ещё пример, как это всё увязать с фронтом (почти всегда у новичков - это следующий запрос в Гугл) 😅
@Richmanforyou
@Richmanforyou 6 месяцев назад
удалось найти?)
@zak_47
@zak_47 3 года назад
Жаль что лайк можно поставить только 1. Твой канал рекомендую людям только потому что все на практике показываешь. Это тебя выделяет на фоне остальных
@Levelord92
@Levelord92 3 года назад
Вот это я великолепный канал отрыл на ночь глядя, повезло) подписался
@MaksimZhashkevych
@MaksimZhashkevych 3 года назад
Приятно читать, спасибо!
@xjoel0065
@xjoel0065 3 года назад
Можно ли использовать рефреш токен как jwt? А в jwt написать под каким id хранится в базе токен и изменять его если не истёк exp. И Я так понимаю у вас в приложении можно иметь только одну сессию, пока не обновится рефреш.
@tilekasankulov5034
@tilekasankulov5034 3 года назад
Отличный пример!!! Спасибо Вам большое. Ждем еще
@lholko
@lholko 2 года назад
Я не понял одного момента. Для реализации авторизации/аутентификации мы можем использовать токены или сесии. а здесь ты одно и другое слил вместе. так норм делать?
@АлександрБугримов-о1е
Спасибо большое за видео. Многое становится понятнее
@MaksimZhashkevych
@MaksimZhashkevych 3 года назад
Рад что информация оказалась полезной)
@themichael8767
@themichael8767 Год назад
Спасибо Вам большое 🤍
@denisrogov7120
@denisrogov7120 Год назад
Жаль, что в конце в коде так и не показал механику с refresh токенами. Непонятно именно как рефрешь обновляет access.
@harrisonwinston2850
@harrisonwinston2850 Год назад
куча объяснений в интернете, попробую описать кратенько. С клиента отправляется запрос с токеном в заголовках, на бекенде мы смотрим в него и проверяем токен через метод библиотеки. Если токен протух тут два пути - перехватывать на сервере или через клиент, то есть отбработать механизм отправки запроса на рефреш токена, который возьмет его уже из куков нашего клиента. Этот токен тоже нужно проверить на срок годности и валидность соответственно, (плюсом дополнительные проверки, если имеются в базе данных и поиск токена и юзера с ним в БД). Если все ок то отдаешь новую пару токенов и ставишь их в куки клиента. Если на каком-то из этапов провал в ошибку - то выход из сессии
@domoji74tsukasa91
@domoji74tsukasa91 3 года назад
Хорошо объяснил! Такой вопрос, почему у твоего канала не отображается количество подписчиков?
@mrviago5676
@mrviago5676 2 года назад
Спасибо за труд
@sackeja
@sackeja 2 года назад
Зачем нужны jwt, если можно сразу в базе токены хранить?
@Aaaa-jn4bm
@Aaaa-jn4bm 2 года назад
Чтобы при каждом запросе не обращаться к базе данных за дополнительной информацией о пользователе, например за его ролью. Используя jwt мы можем хранить информацию о пользователе в токене, соответственно в middleware мы можем сразу достать эту информацию, не обращаясь при этом к БД. Если информацию подделают - токен станет недействительным. Благодаря refresh токенам мы обращаемся к БД лишь раз в 15 минут, вместо того, чтобы обращаться к ней при каждом запросе. Да, это немного сложнее, чем просто из БД нужную инфу доставать. Но мы ведь в go приходим за производительностью, правильно ?
@sackeja
@sackeja 2 года назад
@@Aaaa-jn4bm это может и работает хорошо в микросервисах, при общении между ними. Но для обычного сайта это только лишний геморрой. Например, если открыли 2 вкладки браузера, то уже нужно синхронизировать между ними эти токены Да и часто бывает, что id пользователя мало, и приходится его все равно из базы тянуть.
@Aaaa-jn4bm
@Aaaa-jn4bm 2 года назад
@@sackeja , так для обычного сайта токены в http only куки должны сохранятся, и никакие вкладки тогда синхронизировать не нужно будет :) И приведите пожалуйста пример такой информации, которую придётся тянуть из базы, вместо того чтобы поместить её в токен)) Никто так не делает, jwt именно для этого и создавалось - хранить информацию в токене, чтобы каждый раз не обращаться в бд
@sackeja
@sackeja 2 года назад
@@Aaaa-jn4bm ну да, с куками согласен
@sackeja
@sackeja 2 года назад
@@Aaaa-jn4bm ну пожалуй соглашусь, что в большинстве случаев можно все зашить в токен
@standarttechnology4477
@standarttechnology4477 2 года назад
Привет, Максим! Нужна ли тебе какая то помощь? Куда тебе можно написать?
@MaksimZhashkevych
@MaksimZhashkevych 2 года назад
Здравствуй! Добавляйся в Slack-комьюнити проекта Creatly - join.slack.com/t/creatlyworkspace/shared_invite/zt-10exogwme-IPDg1bFaH~RfAKYCY~~z8g Там мы можем пообщаться, а в скором времени я скину список задач, которые можно делать
@ThePirateHistory
@ThePirateHistory 3 года назад
Может переставить микрофон в другое место и под другим углом? шум мака 24/7))да и к тому же видно, что ты никогда не говоришь в микрофон. Как по мне хотябы просто повернуть в права так как ты сидишь и чуть вверх. И что-то со звуком в принципе будто-то глухо и объемно, на микро вроде должны быть режимы как брать звук направленно, либо повсюду и т.д
@realtimeuser
@realtimeuser 3 года назад
есть подписчики которые не понимают назначения jwt и советуют куки:) напомню что назначение jwt для архитектуры распределённых серверов которым надо всеголишь раздать секрет-ключ-подписи и не заморачиваться с общим хранилищем сессий для всех микросервисов.
@ArslanArslan-ph2pz
@ArslanArslan-ph2pz 2 года назад
Эх, жалко, что ты перестал снимать видосы по Go, а то контента не хватает. Всего хорошего тебе
@delay_gryaz_chisto
@delay_gryaz_chisto 3 года назад
так ты же переизобрел сессии... все это ради меты о юзере в токене? я бы с таким успехом заюзал редис. клал бы инфу о юзере в формате {сессия: мета_юзера} и все. а сами сессии в базе. в кеш закидывать на часов 12, чтоб базу не мучить лишний раз. еще очень интересно почему выбор пал на нереляционную базу, потому как модель данных напротив - реляционная(если я правильно понял). спасибо за видео и старания.
@MaksimZhashkevych
@MaksimZhashkevych 3 года назад
Не совсем. При получении токена я не обращаюсь ни к какому внешнему хранилищу (БД или Редис), а вся нужная информация хранится в токене. Изначально я проектировал модель данных под реляционную БД, но решил взять Mongo. 1) С точки зрения инфраструктуры это дешевле на начале (На MongoDB Atlas можно развернуть монгу в облаке и использовать ее бесплатно до 512 мб, что мне сейчас очень подходит). Я решил что не хочу самостоятельно разворачивать БД и админить ее, проще немного доплатить за DBaaS и спокойно спать по ночам. 2) Поскольку мой проект - стартап, модель данных будет неизбежно изменятся и обновляться. Специфика монги позволяет легко вносить изменения и не морочить себе голову с миграциями в SQL. 3) Я последний раз работал с монго почти 3 года назад, и тот проект имел плохую архитектуру. Решил что хочу попробовать поработать с ней еще раз уже самостоятельно на своем проекте и познакомиться с ней лучше на практике)
@ASKOLDEX
@ASKOLDEX 3 года назад
Ты так молодым и не объяснил зачем подписи. Сайты использующие сессии классические, при каждом запросе дергают из базы данных модель пользователя. jwt же позволяет от этого отказаться, ведь в 99% случаев дергают юзера просто чтобы узнать его id для дальнейших манипуляций)))
@АлександрРыков-ж4ы
oauth 2.0 добавить title, сразу и не понял что это он.
@MoRFaiR
@MoRFaiR 2 года назад
вообще ошибочно про рефреш токен. он должен быть нормальным JWT со своим exp'ом. а тут вечный "рефреш токен" получается.
@zenderfufikoff
@zenderfufikoff 3 года назад
Эта популярная библиотека для работы с jwt нынче мертва. Автор её забросил, пара тройка критических проблем и с awesome-go ссылку на неё тоже убрали
@ПётрСуворов-ю8в
@ПётрСуворов-ю8в 3 года назад
Слушай а ты не знаешь как в своем IDE масштаб увеличить?) С телефона смотреть вообще не возможно... Ну очень мелко. Подумай об этом)
@zasssada
@zasssada 3 года назад
На кой черт так все слишком усложнять? при авторизации ты генерируешь некий уникальный строковый идентификатор и передаешь пользователю - теперь это твоя кука. По этой куке ты узнаешь в своей таблице авторизованных пользователей, кто есть кто. ВСЕ.
@Aaaa-jn4bm
@Aaaa-jn4bm 2 года назад
Чтобы при каждом запросе не обращаться к базе данных за дополнительной информацией о пользователе, например за его ролью. Используя jwt мы можем хранить информацию о пользователе в токене, соответственно в middleware мы можем сразу достать эту информацию, не обращаясь при этом к БД. Если информацию подделают - токен станет недействительным. Благодаря refresh токенам мы обращаемся к БД лишь раз в 15 минут, вместо того, чтобы обращаться к ней при каждом запросе. Да, это немного сложнее, чем просто из БД нужную инфу доставать. Но мы ведь в go приходим за производительностью, правильно ?
Далее
Stay Fresh: .NET 7 Web API Refresh Tokens 🌊
18:25
Просмотров 20 тыс.
Аутентификация. Сессии и JWT
23:37