Я создаю мобильное приложение и использую JWT для аутентификации.
Похоже, что лучший способ сделать это - связать токен доступа JWT с токеном обновления, чтобы я мог истекать токен доступа так часто, как хочу.
- Как выглядит токен обновления? Это случайная строка? Эта строка зашифрована? Это еще один JWT?
- Токен обновления будет храниться в базе данных модели пользователя для доступа, верно? Похоже, в этом случае он должен быть зашифрован
- Могу ли я отправить токен обновления обратно после входа пользователя, а затем предоставить клиенту доступ к отдельному маршруту для получения токена доступа?
security
authentication
oauth-2.0
jwt
jtmarmon
источник
источник
Ответы:
Предполагая, что речь идет о OAuth 2.0, поскольку речь идет о JWT и токенах обновления ...:
как и токен доступа, в принципе токен обновления может быть любым, включая все описанные вами параметры; JWT может использоваться, когда сервер авторизации хочет быть без состояния или хочет навязать своего рода семантику «доказательства владения» клиенту, представляющему его; обратите внимание, что токен обновления отличается от токена доступа тем, что он не предоставляется серверу ресурсов, а только серверу авторизации, который его выпустил в первую очередь, поэтому автономная оптимизация проверки для JWT-as-access-tokens действительно не удерживать токены обновления
это зависит от безопасности / доступа к базе данных; если к базе данных могут получить доступ другие стороны / серверы / приложения / пользователи, тогда да (но ваш опыт может зависеть от того, где и как вы храните ключ шифрования ...)
Сервер авторизации может выдавать и токены доступа, и токены обновления одновременно, в зависимости от разрешения, которое использует клиент для их получения; спецификация содержит подробную информацию и варианты по каждому из стандартизированных грантов
источник
Ниже приведены шаги для отзыва вашего токена доступа JWT:
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, я также могу поделиться кодом (загрузка Java + Spring).
По вашим вопросам:
Q1: Это еще один JWT с меньшим количеством заявлений и длительным сроком действия.
Q2: Этого не будет в базе данных. Бэкэнд нигде хранить не будет. Они просто расшифруют токен с помощью закрытого / открытого ключа и также проверит его срок действия.
Q3: Да, правильно
источник
localStorage
аrefreshToken
файл - вhttpOnly
. ЕгоrefreshToekn
можно использовать для получения нового JWT, поэтому с ним нужно обращаться с особой осторожностью.На основе этой реализации с Node.js JWT с токеном обновления :
1) В этом случае они используют uid, а не JWT. Когда они обновляют токен, они отправляют токен обновления и пользователя. Если вы реализуете его как JWT, вам не нужно отправлять пользователя, потому что он будет внутри JWT.
2) Они реализуют это в отдельном документе (таблице). Для меня это имеет смысл, потому что пользователь может войти в систему в разных клиентских приложениях, и у него может быть токен обновления для каждого приложения. Если пользователь потеряет устройство с одним установленным приложением, токен обновления этого устройства может быть признан недействительным, не затрагивая другие зарегистрированные устройства.
3) В этой реализации это ответ на метод входа в систему с токеном доступа и токеном обновления. Мне это кажется правильным.
источник
iat
с помощью окна) - переиздайте новый, основанный на предыдущемJWT
вы хотите иметьrefresh_token
внутри? Если это так, OAuth RFC 6749 явно говорит не отправлятьrefresh_token
на сервер ресурсов (иJWT
отправляется на серверы ресурсов): tools.ietf.org/html/rfc6749#section-1.5