#keycloak #keycloak-rest-api
#keycloak #keycloak-rest-api
Вопрос:
Я хочу сохранить информацию (например, внешний идентификатор) в пользовательских пользовательских атрибутах после регистрации. Конечная цель — иметь эту информацию в токене JWT.
У меня возникли проблемы с поиском правильного способа сделать это. Я думаю, что это может быть не очень хороший дизайн.
Подробнее о моем варианте использования: когда пользователь регистрируется в keycloak, мне нужно создать пользователя во внешнем приложении, и я хочу сохранить этот внешний идентификатор в keycloaK.
Я думал о SPI-прослушивателе событий и сделать кое-что после регистрации, но это кажется излишним
Ответ №1:
После регистрации пользователя вы можете добавить внешний идентификатор в качестве пользовательского атрибута пользователя, используя конечную точку:
PUT <YOUR_KEYCLOAK_DOMAIN>/auth/admin/realms/<YOUR_REALM>/users/<USER_ID>
с полезной нагрузкой {"id":"<USER_ID>","attributes":{"ExternalID":["<THE_EXTERNAL_ID>"]}}
идентификатор пользователя, который вы можете получить из:
GET <YOUR_KEYCLOAK_DOMAIN>/auth/admin/realms/<YOUR_REALM>/users/?username=<THE_USERNAME>
Я создал сценарии для этого в своем репозитории. Скрипты также следят за тем, чтобы новые атрибуты добавлялись к старым, а не заменяли их.
Для обеих этих конечных точек вам необходимо отправить в заголовках токен от администратора, похожего на пользователя.
В Keycloak перейдите к:
- Ваша область
- Клиенты> клиент, который вы будете использовать для аутентификации вашего приложения,
- Картографы
- Создать
- Выберите тип отображения: Атрибут пользователя
- Атрибут пользователя: externalId
- Заполните остальное.
Метку externalId вы можете заменить на то, что вы будете использовать.
Этого достаточно, чтобы внешний идентификатор был включен в токены JWT