ОБЩИЕ ФАКТОРЫ
Обычно это области, на которые влияет ваш выбор безопасности SPA, и есть компромиссы:
- Тип приложения
- Надежная безопасность
- Хостинг и глобальная производительность
- Техническая простота
ВО ВСЕХ СЛУЧАЯХ
Ваше приложение должно :
- Поддерживать токен для каждого пользователя отдельно
- Вы захотите идентифицировать пользователей по токенам после входа в систему
ВАРИАНТ 1: ПЕРЕДНИЙ КОНЕЦ МОДЕЛЬ / БЕЗ ПЕЧАТИ
Это включает в себя использование токенов в браузере и дает следующие преимущества:
- Серверная часть является статической c только содержимое
- Веб-ресурсы может быть развернут рядом с пользователями через CDN
- Вы можете использовать OID C Клиентскую библиотеку для управления безопасностью
Это широко используется и должно только быть уязвимым, если в вашем приложении есть уязвимости межсайтового скриптинга. Некоторые мои ресурсы:
ВАРИАНТ 2: МОДЕЛЬ ЗАДНЕГО КОНЦА / АВТОМАТИЧЕСКИЕ КУКИ
Это включает проксирование через серверную часть и перенос токенов в файлах cookie аутентификации. Я бы использовал эту модель при разработке приложения для онлайн-банкинга, но для приложений со средней степенью безопасности это может добавить много накладных расходов. Возможно, вам придется написать больше кода безопасности, и вы можете получить менее безопасное решение, чем вариант 1:
- Требуется серверная часть прокси, которая запускает код
- Серверная часть код может потребоваться кластеризовать и глобально распределить для достижения хорошей производительности
- Вам необходимо защитить auth cook ie и справиться с рисками подделки межсайтовых запросов
Из интереса уважаемая библиотека mod_auth_openid c может быть полезна для этого типа решения.
ЛУЧШИЙ ИЗ ОБОИХ МИРОВ
Если использование токенов в браузере считается неприемлемым, я бы постарался максимально следовать варианту 1. Затем реализуйте вариант 2 как дополнительный шаг:
- Развернуть содержимое веб-статистики c отдельно от кода, который управляет внутренними токенами
- Продолжить использовать OID C Клиент библиотека, и сделать так, чтобы обмен кодами авторизации вызывал ваш бэкэнд
- Единственное отличие от варианта 1 состоит в том, что маркеры недоступны для кода браузера