авторизации - login и refresh, login взамен на имя/пароль отдает два токена - access и refresh, токены создаются абсолютно одинаково, разница лишь во времени жизни. По истечении времени access токена по классической схеме отправляется refresh и взамен присылается новый access.
1. В этой схеме можно взять refresh токен после истечения access и просто логиниться по нему, это нормально вообще?
2. В интернет статьях о JWT говорится что идея безопасности в том, чтобы можно было токен отозвать, если узнал что он украден, но в существующей у меня реализации я никак его не отзову, потому что он создается и никакой информации о нем не запоминается. (и по некоторым статьям это правильно, потому что jwt - stateless)
3. Я не понимаю вообще где безопасность в этой схеме, украв один из токенов можно какое-то время свободно получать доступ к сервису не вызывая подозрений.
Как сделать это православно, может кто вкратце описать или дать ссылку на хорошее описание?
refresh нужен, что бы обновлять короткоживущий access token
1. акцесс и рефреш токен отличаются скопом. По рефреш токену нельзя ничего сделать, кроме получения акцесс токена. 2. поверх jwt нужно самому реализовывать механизмы отзыва, используя какой-либо сторедж
и 3. Украв access token действительно можно незаметно получать доступ к сервису пока токен валиден, фишка в том, что бы минимизировать потери путем уменьшения времени жизни токена
Я читал что некоторые отказались от refresh токенов
что значит "скопом"? я же говорю, вот в текущем виде я отправляю refresh токен вместо access, когда access уже истек и у меня всё работает. т.е. если у меня условно access действует 1 час, а refresh 2 дня, то украв refresh злоумышленник может 2 дня ходить на сервис. Мне искусственно нужно в refresh токен писать какой-то отличительный признак, чтобы если в запросе пришёл в поле access: <refreshToken> то сервер его считал невалидным, так это делается обычно?
фингерпринт зашей
значит вы сделали не так,как нужно. Рефреш токен по определению служит лишь для того, что бы обновлять access, он не может использоваться для доступа к сервису. судя по ``что значит "скопом"?`` вообще мало понимаете, как это должно работать.
я же поэтому и спросил, как нужно. я понимаю что рефреш нужен только для обновления и он не должен давать доступ, но мне достался огрызок проекта где сейчас работает именно так, я обратился с вопросом чтобы узнать как правильно вообще это делать
вы можете хранить скоупы в jwt, пример можно подсмотреть вот тут: https://nhsconnect.github.io/FHIR-ReasonableAdjustments-API/design_jwt.html, для рефреша вы можете ограничить возможности только обновлением access токена
Обсуждают сегодня