SPA с refre sh токенами, хранящимися в cook ie - как настроить IdentityServer4? - PullRequest
3 голосов
/ 22 марта 2020

У меня есть SPA, который связывается с API, используя для аутентификации долгоживущий автономный JWT.

В настоящее время SPA хранит этот JWT в локальном хранилище.

Кроме этого Будучи довольно плохим с точки зрения безопасности, другая важная проблема заключается в том, что у меня есть способ отозвать доступ к API (который, между прочим, должен оставаться без состояния). У одного пользователя есть токен, он может использовать его неограниченное время.

Я бы хотел начать использовать refre sh токены. Я знаю, что они обычно не рекомендуются для SPA, однако после прочтения Окончательного руководства по работе с JWT на клиентских приложениях Я считаю, что есть способ сделать это безопасно.

Что мне бы хотелось:

  • Когда пользователь входит в систему (предоставление пароля), сервер отвечает ТОЛЬКО коротким сроком доступа access_token, но устанавливает HttpOnly cook ie с маркером refre sh.
  • Клиент хранит access_token в памяти и использует его при выполнении запросов API.
  • Когда access_token подходит к концу, я бы сделал запрос на сервер аутентификации для обновления sh токена. Поскольку сервер авторизации установил значение ie, оно будет автоматически включено в запрос. Сервер отвечает обновленным маркером access_token, который мы храним в памяти.
  • Если пользователь отходит от SPA и возвращается позже, мы можем просто сделать запрос серверу аутентификации для обновления sh токена, который дает нам совершенно новый (не нужно ничего хранить в локальном хранилище).

Это может показаться наиболее безопасным вариантом, сводящим к минимуму XRSF и CSRF:

  • Если кому-то удастся внедрить некоторый код в SPA и украсть access_token, срок его действия все равно истечет через 5 минут. Внедренный код никогда не получает доступ к refresh_token.
  • Вы не можете обмануть пользователя в выполнении запросов API CSRF, поскольку у вас нет access_token (токен доступа фактически служит токеном CSRF).
  • Если кому-то все-таки удалось получить доступ к refresh_token, его можно отозвать на сервере аутентификации.

Если этот метод настолько же убедителен, насколько я думаю (докажите, что я неправ , пожалуйста!), почему это редко упоминается в Интернете?

Документы IdentityServer4, кажется, не покрывают это. Кто-нибудь может подсказать, как это можно реализовать? Я надеялся, что может быть свойство, которое я мог бы установить в конфигурации клиента в соответствии с UseCookiesForRefresh, но нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...