Создайте настраиваемого поставщика удостоверений и настройте его с помощью keycloak - PullRequest
2 голосов
/ 16 июня 2020

Я работаю над проектом, в котором мне нужно создать приложение, которое будет действовать как посредник OID C между клиентом, который поддерживает только OID C для аутентификации, и REST api. REST api может генерировать токены и предоставлять информацию о пользователе, но не поддерживает OID C.

Для этого я думаю использовать keycloak для обработки связи OID C с клиентом и реализовать мои собственное приложение java, которое keycloak может запускать для реализации конечной точки авторизации, токена и пользовательской информации (своего рода настраиваемого поставщика удостоверений), обрабатывающего связь с остальным API.

Я создал область в keycloak и настроил область использования перенаправителя поставщика удостоверений с поставщиком удостоверений, который я добавил в keycloak (определяемый пользователем OpenID Connect v1.0). В конфигурации поставщика удостоверений я установил все URL-адреса так, чтобы они указывали на мое приложение java, но исходный вызов авторизации OID C от клиента просто перенаправляет на redirect_uri с # error = login_required без какой-либо из моих конечных точек в java запущено приложение.

Думаю, я кое-что пропустил ... Мне нужно вмешаться в процесс авторизации, чтобы я мог выбрать параметр запроса из запроса авторизации, который должен быть обработан в моем приложении java. Мне также нужно отобразить токен из остального api в запрос токена (когда этот запрос поступает из серверной части клиентского приложения) и, наконец, сопоставить объект userinfo как ответ на запрос userinfo.

I очень надеюсь, что у кого-то будет время указать мне в правильном направлении. Заранее большое спасибо.

Редактировать: я добавил диаграмму последовательности, чтобы лучше объяснить: enter image description here

Мне нужно перехватить вызов запроса авторизации на выбрать настраиваемый параметр запроса (endUserString), который идентифицирует пользователя. Формы входа в систему не будет. Мне нужен параметр в моем коде, который использует его для REST API. И токен, и информация о пользователе должны быть получены из моего приложения, а не из самого keycloak.

Посредник Java может заранее запросить токен (A) и использовать его для доступа к Rest API (используя предопределенные clientId и clientsecret). В качестве альтернативы этот токен можно получить для каждого метода. Токен должен использоваться для получения информации о клиенте из REST API (B). Я хочу обернуть это поддержкой OID C без какой-либо формы входа. Браузер просто перенаправит в поток авторизации с endUserString, идентифицирующим конечного пользователя. Информация о клиенте будет возвращена посредником java в keycloak, отвечая на это в GetUserInfoRsp.

1 Ответ

1 голос
/ 19 июня 2020

Я думаю, что может быть более простое решение, чем то, что вы предполагали: реализация вашего собственного настраиваемого аутентификатора для Keycloak.

Keycloak имеет понятие поток аутентификации , который представляет собой дерево аутентификаторов, которые предоставлены Keycloak или изготовлены на заказ. Каждый аутентификатор может быть вызван, чтобы попытаться аутентифицировать пользователя.

Наиболее распространенным является Форма имени пользователя / пароля , которая отображает страницу входа в систему для пользователя и аутентифицирует пользователя, если предоставленные учетные данные действительны. Но вы можете представить себе любой тип аутентификатора, такой как SMS-аутентификатор или magi c ссылку .

Вы можете найти существующие аутентификаторы Keycloak в их репо и документацию о том, как создать свой собственный здесь .

В вашем случае вам нужно будет реализовать свой собственный logi c, где ваш аутентификатор получит endUserString параметр из запроса и вызов REST API для проверки личности пользователя. Вы можете получить токен REST API при инициализации или для каждого запроса. Вы также можете изменить пользователя, хранящегося в Keycloak, с помощью данных, поступающих из конечной точки информации о пользователе REST API (общие атрибуты OID C или настраиваемые атрибуты).

Обратите внимание, что команда разработчиков объявила Keycloak X , своего рода перезагрузка проекта, которая, вероятно, внесет критические изменения в их API.

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

...