Сохранение аутентификации пользователя Gun DB во время сеанса - PullRequest
0 голосов
/ 02 декабря 2018

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

1 Ответ

0 голосов
/ 12 декабря 2018

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

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

  1. , если вы добавите user.recall({sessionStorage: true}), он попытается автоматически войти в систему. Но вы правы, есть некоторые компромиссы безопасности, но я думаю, что это разумно.
  2. localStorage.Я слышал, как несколько человек жалуются, что разные браузеры плохо обрабатывают sessionStorage (не сохраняет в новой вкладке и т. Д.), Поэтому следующим вариантом будет использование localStorage.Однако я считаю, что это актуальная проблема безопасности.
  3. SPA.Одностраничное приложение - это уже будет полезно, если вы пытаетесь распространять автономные упакованные «приложения».Но вы правы, у вас все еще есть проблема обновления.По моему опыту, (1) работал достаточно хорошо, чтобы сделать это удобным для пользователя.
  4. PIN.Еще одна идея, которую разработало наше сообщество, заключалась в использовании (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

Редактировать: MetaMask все еще работает над ихAPI для этого, тем временем, вы можете использовать наше расширение http://party.lol.

...