Как сохранить внешние данные в пользовательской модели keycloak после регистрации

#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