Keycloak получить пользовательские атрибуты KeycloakPrincipal

в моей службе rest я могу получить основную информацию после аутентификации с помощью

KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();

заявление.

KeyCloak principal не содержит всю необходимую информацию об аутентифицированном пользователе. Возможно ли настроить мой собственный основной тип? На сервере keycloak-Server-end я разработал поставщика Федерации пользователей. Я видел, что UserModel позволяет добавить набор пользовательских атрибутов моему пользователю.

возможно ли вставить мой пользовательский Принципал в этом коде?

можно ли получить эти атрибуты из участника keycloak?

Каков путь?

2 ответов


чтобы добавить пользовательские атрибуты, вам нужно сделать три вещи:

  1. добавить атрибуты в консоль администратора
  2. добавить отображение утверждений
  3. претензий к

первый объясняется довольно хорошо здесь:http://www.keycloak.org/docs/3.3/server_admin/topics/users/attributes.html

добавить сопоставление утверждений:

  1. Откройте консоль администратора вашей области.
  2. перейти к клиентов и откройте своего клиента
  3. это работает только для настроек > Тип доступа конфиденциальный или Открытый (не только на предъявителя)
  4. перейти к картографам
  5. создайте отображение из вашего атрибута в JSON
  6. Проверьте "добавить в ID token"

открыть требования:

final Principal userPrincipal = httpRequest.getUserPrincipal();

if (userPrincipal instanceof KeycloakPrincipal) {

    KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) userPrincipal;
    IDToken token = kp.getKeycloakSecurityContext().getIdToken();

    Map<String, Object> otherClaims = token.getOtherClaims();

    if (otherClaims.containsKey("YOUR_CLAIM_KEY")) {
        yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY"));
    }
} else {
    throw new RuntimeException(...);
}

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


  • выберите пользователи > Поиск > нажмите ID > перейдите на вкладку атрибуты > добавить атрибут > например: телефон > сохранить enter image description here

  • выберите клиенты > нажмите на идентификатор клиента > перейдите на вкладку Mappers > create mapper

    enter image description here

    enter image description here

    enter image description here

  • получить пользовательские атрибуты

    enter image description here

    enter image description here