Я не уверен, что это полностью ответит на ваш вопрос, потому что он еще не c достаточно, но может дать вам дополнительную помощь.
Если вы новичок в topi c см. разницу между publi c и конфиденциальными клиентами здесь.
В настоящее время передовой практикой для клиентов publi c, таких как приложения HTML / Javascipt, является использование OpenId Connect с поток кода авторизации + PKCE . HTTPS, конечно, просто необходим. Я рекомендую вам использовать для этого javascript адаптер openid connect, например, например:
https://github.com/panva/node-openid-client
В основном ваш поток аутентификации / авторизации отображается здесь : когда пользователь сначала хочет войти в систему из вашего внешнего клиентского приложения, создается уникальный верификатор, который доступен только конкретному сеансу пользователя / браузера. Это значение хешируется как вызов кода. Затем пользователь перенаправляется на страницу входа в систему вашего сервера авторизации (например, Keycloak), передавая некоторые параметры, такие как uri перенаправления и запрос.
При успешном входе в систему пользователь получает сеанс на сервере keycloak, который также сохраняет хешированный вызов. Затем пользователь перенаправляется на указанный uri перенаправления (путь в вашем приложении) вместе с кодом для получения токена доступа. Вернувшись в свое приложение, вы используете исходное значение вместе с кодом для получения фактического токена. Сервер авторизации сравнивает значение с сохраненным запросом и возвращает токен доступа, если он совпадает. Как видите, дополнительный верификатор предназначен для предотвращения взлома вашего фрагмента кода для получения токена от вашего имени.
Теперь у вас есть закодированный токен доступа в приложении браузера. Обратите внимание, что сам токен обычно только закодирован, а не зашифрован, но его можно подписать. Эти подписи позже можно будет использовать из вашего бэкэнда для проверки целостности токена, но мы скоро к этому вернемся. Роли, требования, области и т. Д., Включенные в ваш токен доступа, сообщают вам привилегии пользователя / личности. Вы, конечно, можете использовать их для включения / отключения функций в вашем приложении, блокировки маршрутов и т. Д. c. но в конечном итоге защита клиента никогда не бывает действительно эффективной, поэтому ваша настоящая авторизация и защита ресурсов происходит на вашем сервере ресурсов, который является вашим бэкэндом (узел,. net ядро, java и c.) может быть, успокаивающий веб-API. Вы передаете свой токен доступа как часть заголовка HTTP-запроса с каждым запросом к бэкэнду. Теперь ваш бэкэнд проверяет целостность токена (необязательно), срок действия et c. анализирует области действия, заявки и роли для ограничения доступа к ресурсам.
Например, простому GET myapi / car / {1} может потребоваться только токен или он может даже быть анонимным, в то время как POST myapi / cars или PUT myapi / car / {1} может потребоваться особая роль или более высокие привилегии.
Это вам поможет?