Сохранение аутентификации пользователя Gun DB во время сеанса

Я тянусь за системой аутентификации Gun/SEA для распределенного / безсерверного приложения. Это приложение сохраняет информацию о сеансе в локальном хранилище, когда пользователь Gun аутентифицирован. Одна из проблем, с которыми я сталкиваюсь, - это когда страница обновляется или открывается новая вкладка. Я хочу сохранить аутентификацию пользователя, пока сеанс действителен, и я бы не хотел хранить имя пользователя и пароль в локальном хранилище из-за XSS и физических соображений безопасности., Есть ли решение этой проблемы в настоящее время? Я думаю, что sessionStorage может быть лучше, но у него все еще есть некоторые проблемы безопасности, связанные с хранением имени пользователя и пароля там, где его может получить злоумышленник, и с необходимостью входа пользователя в систему при открытии новой вкладки.

1 ответ

Грант ! Замечательно слышать от вас, извините за задержку с ответом (я не уверен, кто был комментирующим, поскольку это не помогло вашей ситуации).

Это отличный вопрос, и вы уже немного коснулись границ безопасности и технологий браузеров - честно говоря, ни один из них не очень хорош. Давайте рассмотрим:

  1. если вы добавите user.recall({sessionStorage: true}) он попытается автоматически войти в систему. Но вы правы, есть некоторые компромиссы безопасности, но я думаю, что это разумно.
  2. localStorage, Я слышал, как несколько человек жалуются, что разные браузеры плохо обрабатывают sessionStorage (не сохраняет в новой вкладке и т. Д.), Поэтому следующим вариантом будет использование localStorage. Тем не менее, я думаю, что это актуальная проблема безопасности.
  3. СПА. Одностраничное приложение - это уже будет полезно, если вы пытаетесь распространять автономные упакованные "приложения". Но вы правы, у вас все еще есть проблема обновления. По моему опыту, (1) работал достаточно хорошо, чтобы сделать это хорошим опытом для пользователей.
  4. ШТЫРЬ. Еще одна идея, которую разработало наше сообщество, заключалась в использовании (1 ~ 3), но в сочетании с PIN-кодом устройства. Это означает, что вы можете хранить его в localStorage с разумными допущениями в отношении безопасности, а при обновлении / возобновлении пользователи вводят свой ПИН-код для расшифровки своего сеанса.
  5. IndexedDB, Оказывается, что API-интерфейс WebCrypto имеет возможность импортировать ключи и будет шифровать их в IndexedDB и извлекать их позже, не передавая их на пользовательскую землю - по крайней мере, так я слышал. Однако вам все еще приходится иметь дело с первоначальным получением ключей, и поддержка IndexedDB варьируется, и вы должны написать для нее плагин GUN.
  6. Расширение браузера. Мне это нравится меньше всего, так как для этого требуется, чтобы пользователь что-то установил, но из-за того, что браузеры не предоставляют какой-то встроенной функциональности, эквивалентной защищенной, мы должны вмешаться. Хорошей новостью является то, что происходит интеграция с GUN + MetaMask, и MetaMask уже имеет 1M+ установок, так что, возможно, у ваших пользователей уже есть такая возможность.
  7. API браузера. Мы будем работать с командой MetaMask и другими, чтобы получить стандартный API для этого в качестве стандарта. Я надеюсь, что Brave последует примеру MetaMask, а FireFox последует за Brave, а Chrome последним.

Между тем, ваше оригинальное предложение, вероятно, лучше всего - использовать (1) sessionStorage. Это будет / является прямой / обратной совместимостью с MetaMask. В среднесрочной перспективе, надеюсь, вы или кто-то еще в сообществе получите (5) работу. И тогда долгосрочное (6 и 7) будет решением.

На данный момент, ознакомьтесь с демонстрацией MetaMask: https://twitter.com/marknadal/status/1062153254283276288

Другие вопросы по тегам