Angular 5 смешанных типов аутентификации с устаревшей системой

У нас есть устаревшая система, которую мы хотим перенести в Angular. Поскольку система большая, мы пойдем шаг за шагом и перенесем модуль за модулем.

Теперь, пока мы не закончили со всей Системой, нам, вероятно, нужно будет переключаться между Angular SPA и устаревшей системой, поскольку Angular не очень хорошо играет в приложении, как я читал.

Теперь, что вы делаете с аутентификацией? На стороне SPA будет JWT, и там будет соответствующая конечная точка для преобразования этого в аутентифицированного пользователя. На устаревшей стороне сеанс существует.

Но как мне справиться с переключением контекста (между SPA и Legacy), чтобы использовать оба, JWT and session cookie? Я предполагаю хранить токен JWT И куки и хранить обе системы в общедоступной папке Legacy, проходить аутентификацию через Angular, отправлять и хранить оба типа.

Есть ли лучший способ добиться этого?

1 ответ

Извините, что я не смог ответить раньше. Один из способов, который я могу придумать для этого, - встроить iframe в каждую вашу Angular SPA и унаследованную систему, которая загружает страницу получения из другой системы. Эта принимающая страница выполняет вход / выход пользователя из другой системы. Кроме того, вы не хотите хранить JWT или что-то чувствительное в общей папке; используйте localStorage для JWT, и этого должно быть достаточно для поддержания сеанса на уровне клиента.

Для получения информации о реализации iframes вы можете обратиться к https://jcubic.wordpress.com/2014/06/20/cross-domain-localstorage/

Давайте посмотрим на следующие сценарии. В зависимости от того, как вы реализуете свою аутентификацию, для применения могут потребоваться некоторые изменения:

Сценарий 1: пользователь вошел в приложение Angular

Когда пользователь входит в ваш Angular SPA, аутентификация через устаревший API возвращает JWT и сохраняется в localStorage. Каждый раз, когда пользователь делает запрос через ваше приложение Angular, JWT отправляется через ваш заголовок авторизации, чтобы идентифицировать пользователя.

Теперь, когда JWT возвращается после входа в систему, отправьте сообщение о входе во встроенный iframe (указывая на вашу предыдущую страницу получения), чтобы получающая страница создала сеанс пользователя /cookie в вашем устаревшем домене. Вы должны установить cookie на то же время истечения, что и ваш JWT.

Сценарий 2: пользователь вышел из приложения Angular

Удалите JWT из вашего локального хранилища. Отправьте сообщение в свой iframe, чтобы файл cookie сеанса пользователя был уничтожен в вашем устаревшем домене.

Сценарий 3: пользователь вошел в наследство

Вам нужно будет немного изменить логин. Когда пользователь входит в вашу унаследованную систему, вам также необходимо сгенерировать JWT и вернуть его на страницу после успешного входа в систему. Отправьте сообщение через встроенный iframe (теперь указывающий на ваше приложение Angular), чтобы сохранить JWT в вашем localStorage в вашем домене SPA.

Вам не нужно создавать пользовательский сеанс на угловой стороне, поскольку JWT достаточно, но имейте в виду, что время истечения пользовательского сеанса должно синхронизироваться с вашим истечением JWT.

Сценарий 4: пользователь вышел из устаревшего

Отправьте сообщение в ваш Angular SPA через ifame, чтобы удалить JWT из localStorage. Опять же, вам не нужно беспокоиться о сеансе для вашего пользователя на вашем Angular конце, так как вы уже используете JWT для авторизации.

Несколько слов о безопасности

Очевидно, что для реализации этого подхода iframe вам нужно будет включить CORS, если ваши сайты находятся в разных доменах. Убедитесь, что вы применяете соответствующие меры безопасности для предотвращения таких эксплойтов, как XSS или встраивание iframe, загружающих ваши сайты в запрещенный домен.

Кроме того, когда я использую JWT, я генерирую идентификатор (JTI), делаю его частью полезной нагрузки JWT и сохраняю хешированный JTI в виде файла cookie. Таким образом, всякий раз, когда пользователь делает запрос с использованием JWT, я могу проверить, есть ли в браузере файл cookie JTI, и убедиться, что пользователь не просто украл JWT для использования на другом компьютере.

Дайте мне знать, если у вас есть дополнительные вопросы!

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