Keycloak получить пользовательские атрибуты KeycloakPrincipal
в моей службе rest я могу получить основную информацию после аутентификации с помощью
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
заявление.
KeyCloak principal не содержит всю необходимую информацию об аутентифицированном пользователе. Возможно ли настроить мой собственный основной тип? На сервере keycloak-Server-end я разработал поставщика Федерации пользователей. Я видел, что UserModel позволяет добавить набор пользовательских атрибутов моему пользователю.
возможно ли вставить мой пользовательский Принципал в этом коде?
можно ли получить эти атрибуты из участника keycloak?
Каков путь?
2 ответов
чтобы добавить пользовательские атрибуты, вам нужно сделать три вещи:
- добавить атрибуты в консоль администратора
- добавить отображение утверждений
- претензий к
первый объясняется довольно хорошо здесь:http://www.keycloak.org/docs/3.3/server_admin/topics/users/attributes.html
добавить сопоставление утверждений:
- Откройте консоль администратора вашей области.
- перейти к клиентов и откройте своего клиента
- это работает только для настроек > Тип доступа конфиденциальный или Открытый (не только на предъявителя)
- перейти к картографам
- создайте отображение из вашего атрибута в JSON
- Проверьте "добавить в 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 > перейдите на вкладку атрибуты > добавить атрибут > например: телефон > сохранить
-
выберите клиенты > нажмите на идентификатор клиента > перейдите на вкладку Mappers > create mapper
-
получить пользовательские атрибуты