accessToken срок 3 минуты.
После истечения accessToken мы обновляемся используя refreshToken + accessToken
Но что если я авторизуюсь через другой браузер, и refreshToken в бд перезаписывается, как быть для этого для первого пользователя?
Первый пользователь будет разлогинен когда его access токен протухнет, нет?
Да, и как этого избежать?
Он уже не получит новый accessToken, так как refreshToken был перезаписан..
держешь в базе до Н числа сессий на юзера, например 5
https://gist.github.com/zmts/802dc9c3510d79fd40f9dc38a12bccfc
ответ - не делать это всё самому, возьми уже готовое
А зачем токен в базе хранить?
это сразу удаляй, люди соберут все возможные грабли, реализуя это самостоятельно
ты говоришь с позиции своего многолетнего опыта, джунам полезно и самим свои жвт написать имхо
Вы имеете ввиду в сервере хранить сессии?
Ну можете так назвать
меня ещё немного корёжит от слова JWT аутентификация. А если я в той же схеме выше вместо JWT буду аксец токены гуидами выдавать, что-то поменяется?
не поменяется в принцыпе
именно. Потому что аксец токены по OAuth - opaque string вообще насрать что там
Что есть готовое?
да но опять же, ты говоришь с позиции своего опыта и уровня знаний, для большинства твои слова шифр тут хоть ты и прав
refreshtoken обязан жить до истечение своего времени жизни
тиха, я на это расчитываю когда пишу код
кароч есть сессия, сессия это активная пара аксесс рефреш токенов
всё немного сложнее. А если сессия была на 4 audience + on_behalf, где возможен token exchange?
сложнее, но у него то пет проект обычный и желание понять как работает жвт )
жвт - это всего лишь обосанный контейнер для передачи клеймов с опциональной подписью, ты с тем же успехом клеймы можешь в XML передавать с подписью в query (и получишь SAML Redirect Binding)
да но надо с малого начинать )
ну ок, погугли про другие контейнеры для токенов - paseto например
можно сделать сущность UserSession и туда писать рефреш сериализованный например
Обсуждают сегодня