Сначала: у меня почему-то возникла мысль, что sessionStorage
подходит для токенов и что следует избегать localStorage
. Но это был другой проект, в котором были задействованы более мощные (обновляемые) токены, и с неявным потоком у меня были только кратковременные токены доступа, поэтому localStorage
не намного (если вообще) небезопаснее, чем sessionStorage
.
Я не упомянул, что у меня была эта идея, и другой ответ услужливо заставил меня переосмыслить вещи и подумать об использовании localStorage. На самом деле это было хорошее решение.
Оказывается, в библиотеку встроена поддержка использования localStorage
в качестве резервного хранилища для токенов и других данных. Сначала я пытался:
// This doesn't work properly though, read on...
this.oAuthService.setStorage(localStorage);
Но этот способ начальной загрузки не работал для моего случая, см. выпуск 321 в списке проблем библиотек GitHub для моего входа в систему. Повторяя решение (или обходной путь?) Из этого потока, я решил некоторые проблемы, выполнив это в модуле приложения providers
:
{ provide: OAuthStorage, useValue: localStorage },
Теперь библиотека будет правильно использовать localStorage, и новые вкладки (и даже новые окна) автоматически ее подберут.
В качестве сноски, если вы не хотите использовать localStorage
, например, из соображений безопасности, вы также можете предоставить собственное хранилище, если оно реализует интерфейс OAuthStorage
. Ваша собственная реализация может затем использовать любой из доступных методов взаимодействия между вкладками, чтобы «запрашивать» данные из других вкладок, возвращаясь к sessionStorage, если это необходимо.