Токен доступа JWT и безопасность обновления токена - PullRequest
0 голосов
/ 06 мая 2018

Я создаю приложение для внешнего Reactjs и внутреннего SpringBoot (REST).

Я хочу использовать токены JWT для безопасности. Из-за проблем безопасности, которые могут подразумевать кражу маркера обновления JWT, я подумал спросить вас, является ли следующий сценарий допустимым:

  • Back-конец

    • при входе создать доступ-JWT и обновить-JWT
    • в обоих разделах полезной нагрузки установить одинаковый уникальный UUID (поэтому я создаю «связь» между ними). ​​
    • сохранить хеш-код refresh-JWT в БД (для проверки в будущем)
    • возвращает как ответ в теле доступа-JWT и как cookie-обновление-JWT.
  • Фронтальный

    • Store access-JWT в локальном хранилище
    • Store refresh-JWT как cookie

Теперь при каждом запросе от внешнего интерфейса я буду относить оба токена (access-JWT в заголовке и refresh-JWT в виде cookie). Я проверяю их обоих, имеют ли они одинаковый уникальный UUID. Если они это сделают, я продолжу процесс проверки для них.

Делая это, я прыгаю, чтобы устранить атаки XSS и CSRF, предполагая, что они не будут выполняться одновременно. Так что, если access-JWT украден, у атакующего не будет refresh-JWT и наоборот.

Пожалуйста, поделитесь своими мыслями. Спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

Не следует изобретать собственную схему аутентификации / управления сеансом, поскольку мелкие детали могут подорвать безопасность всей системы.

Цитирование из Auth0's Какой поток OAuth 2.0 мне следует использовать?

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

Я бы предложил использовать стандартный поток OpenID Connect (или OAuth 2.0) - в вашем случае неявный поток .

...