Существует несколько вариантов безопасного хранения токенов без использования бэкэнда, но каждый из них имеет некоторые ограничения:
- Локальное хранилище: токены могут храниться в localStorage или IndexedDB, которые доступны только для исходного сайта. Однако эти механизмы хранения в конечном итоге находятся под контролем пользователя через его браузер. Опытный пользователь может просмотреть и извлечь любые токены.
- Файлы cookie только для HTTP: установка флага HttpOnly при установке файла cookie из серверной части предотвращает доступ клиентского JavaScript к файлу cookie, что повышает безопасность. Однако для первоначальной установки файла cookie по-прежнему требуется участие серверной части.
- Шифрование: токен может быть зашифрован на стороне клиента перед сохранением в локальном хранилище или в файле cookie. Но это не мешает пользователю извлекать и расшифровывать данные, если у них есть ключ шифрования. Это только скрывает содержимое токена.
- Обфускация: значение токена может быть запутано в коде на стороне клиента, но не зашифровано, чтобы сделать его нечитаемым для человека в случае извлечения. Но решительный пользователь все равно сможет его расшифровать.
В общем, безопасное хранение токенов аутентификации полностью на стороне клиента без какого-либо взаимодействия с серверной частью не считается безопасным, поскольку пользователь полностью контролирует свой собственный браузер. Лучшим подходом было бы использовать серверную часть, хотя бы в минимальной степени, для первоначальной установки механизма безопасного хранения, такого как файл cookie только для HTTP. Это предотвращает прямой доступ к токену на стороне клиента.