Ограничьте соединение фронтального клиента с группами / ролями в области - PullRequest
0 голосов
/ 09 июля 2020

Я ищу способ ограничить доступ пользователей к определенным c клиентам в области. Я знаю, что могу сделать это с клиентом, у которого включена авторизация (поддержка детальной авторизации), но это не работает при попытке подключиться спереди (клиент должен быть publi c, а не конфиденциальным). Я использую приложение javascript для входа в систему из внешнего интерфейса.

Есть ли способ включить авторизацию для клиента publi c или для решения этой проблемы?

Спасибо.

1 Ответ

1 голос
/ 10 июля 2020

Я не уверен, что это полностью ответит на ваш вопрос, потому что он еще не 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} может потребоваться особая роль или более высокие привилегии.

Это вам поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...