По необычным причинам я должен был выполнить аутентификацию на стороне клиента самостоятельно, а не использовать библиотеку OTS.
Текущий поток:
- Когда пользователь запрашивает аутентификациюсоздается всплывающее окно, которое загружает URL-адрес на сервере (NodeJS), которым я управляю
- Сервер использует Passport для создания URL-адреса перенаправления (в зависимости от того, какой поставщик был запрошен) и перенаправляет пользователя на OAuthпровайдер
- Когда аутентификация завершена, провайдер перенаправляет обратно на мой собственный сервер, который (используя паспорт) проверяет, что аутентификация прошла, и генерирует JWT для использования при обращениях к моим службам на сервере
- сервер возвращает страницу, которая передает обратно JWT (или сообщение об ошибке) на начальную страницу (используя window.opener.postMessage)
Это все работает хорошо, но мне неудобно, открывается ли оновектор атаки для спуф-приложения, которое также может открыть тот же всплывающий URL, и сокно входа в систему будет выглядеть так же, как дурак, предоставляющий пользователю доступ к JWT.
Я сделал основы защиты, как я их вижу (проверка HTTP-рефереров, ограничение доменов на postMessage), но оникажется, что они добавляют незначительные контрольно-пропускные пункты, а не полностью решают проблему.
Что-нибудь еще, что я должен сделать, чтобы заблокировать это?