Обеспечивают ли токены обновления JWT большую безопасностьГде их хранить? - PullRequest
0 голосов
/ 23 июня 2019

Я с трудом понимаю, насколько токены обновления JWT безопаснее, чем обычные токены доступа JWT с длительным сроком службы. Я понимаю, что, сохраняя срок жизни маркеров доступа JWT, он ограничивает возможность злоумышленников злоупотреблять им. Это предполагает, что уровень SSL HTTPS каким-то образом был обойден злоумышленником для получения токена доступа JWT в первую очередь.

Каким образом токены обновления JWT решают эту проблему в точности? По истечении срока действия токена доступа вам потребуется передать токен обновления, который также может быть взломан, если мы предположим, что HTTPS недостаточно безопасен. Если злоумышленник получает контроль над токеном обновления, он получает доступ к большому количеству токенов доступа, поскольку токены обновления обычно имеют длительный срок службы. По расширению можно также сказать, что первоначальная аутентификация по имени пользователя / паролю может быть украдена, если протокол HTTPS скомпрометирован.

Поскольку токен обновления должен храниться во внешнем интерфейсе (я создаю загрузочное приложение Angular / Spring), мы должны позаботиться о том, чтобы токен обновления также не мог быть украден на стороне клиента. LocalStorage явно не подходит для хранения токена обновления, поскольку он не предназначен для безопасного хранения. Они также не подходят для отправки каждого запроса, так как в противном случае они будут украдены вместе с токеном доступа, что в первую очередь противоречит цели получения токенов доступа с коротким сроком службы. Где хранить маркер обновления?

Если я хочу предоставить Запомнить меня функциональность на странице входа в систему, Могу ли я просто установить токен обновления с бесконечной продолжительностью жизни?

Я уже прошел несколько хорошо написанных ответов по следующим ссылкам (и другим):

Что если украсть JWT? Рекомендации SPA для аутентификации и управления сеансами https://security.stackexchange.com/questions/119371/is-refreshing-an-expired-jwt-token-a-good-strategy

Но я не удовлетворен этими 3 вопросами.

1 Ответ

1 голос
/ 23 июня 2019

Я постараюсь ответить на все вопросы вашего вопроса

  • Не используйте токены обновления JWT.Используйте непрозрачные маркеры обновления.Как правило, JWT должны иметь очень короткий срок службы.Причина этого заключается в том, что отмена их может быть невозможна, если у вас нет черного списка

  • Вы можете хранить токены обновления в безопасных файлах cookie HttpOnly.Если вы хотите избежать CSRF и XSS, то вы можете разделить токен доступа и сохранить половину в cookie-файлах, а другую половину в localalstorage

  • Если вы предполагаете, что https взломан (что на самом деле являетсявозможно), лучшая защита здесь - иметь меры для обнаружения украденных токенов обновления.Вы можете сделать это, внедрив вращающихся токенов обновления .Это также может быть использовано для реализации функции запомнить меня довольно легко и с высочайшим уровнем безопасности.

В общем, эта тема довольно сложна, и я не смог бы объяснить всеВот.Итак, вот сообщение в блоге Мне нравится, что все объясняется с безопасностью сеанса.У них также есть библиотека с открытым исходным кодом SuperTokens , которую вы можете использовать, и это, безусловно, самая безопасная реализация, которую я когда-либо видел.Они имеют его в различных технических стеках, а также могут реализовать его для вашего технического стека.

...