2015-09-21 2 views
0

Я бы хотел, чтобы Keycloak (1.4.0) включил выбранную локали пользователей в маркер ID.Включите локали пользователя в токен Keycloak ID

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

Кто-нибудь знает, как это сделать?

Заранее благодарен.

Edit: я узнал, что я знаю abput Keycloak Locales из этого класса: http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.keycloak/keycloak-forms-common-freemarker/1.2.0.Final/org/keycloak/freemarker/LocaleHelper.java#LocaleHelper.0LOGGER

ответ

2

Мне удалось решить эту проблему самостоятельно. В результате я использовал функцию loadUserProfile() из адаптера Keycloak JS. Он загружает все пользовательские атрибуты (включая локаль) в объект keycloak.profile, поэтому мне не нужно было настраивать какие-либо картографы.

+1

Хорошо, что он работает сейчас. Я использовал пользовательские атрибуты, видимо, атрибуты профиля обрабатываются по-разному :) –

3

Я полагаю, у вас уже есть что-то вроде этого:

  1. Откройте консоль администрирования вашей области.
  2. Перейдите в раздел Клиенты и выберите ваш клиент
  3. Это работает только для настройки> Тип доступа к конфиденциальной или общественные (не предъявителю только)
  4. Перейти к Картостроители
  5. Создать отображение из вашего атрибута JSon
  6. Проверьте «Добавить в ID лексемы»

для доступа к подключенному требование использовать что-то вроде этого:

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(...); 
} 

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

+0

Я уже пробовал это, но проблема в том, что локаль не является доступной таким образом, поэтому мне пришлось работать с профилем пользователя. – Luka

+0

Мне понравилось, что вы предложили, но я получаю только пустой IDToken. Однако добавление данных в работу токена доступа я могу получить оттуда. Это с весной-безопасность 4.0 и keyclayak 1.7 – mkm13

+0

Это странно. Даже без пользовательских переменных вы должны получить стандартный IdToken, а не null. –

Смежные вопросы