Подтвердить что ты не робот

Fetch Вход в систему Имя пользователя в webapp, защищенном Keycloak

Я получил корпоративное приложение с Keycloak, используя стандартные адаптеры Keycloak на основе wildfly. Проблема, с которой я столкнулся, заключается в том, что остальные веб-службы при вызове должны знать имя пользователя, которое в настоящее время входит в систему. Как получить зарегистрированную информацию пользователя из Keycloak?

Я попытался использовать SecurityContext, WebListener и т.д. Но никто из них не может предоставить мне необходимые данные.

4b9b3361

Ответ 1

Вы получаете всю информацию пользователя из контекста безопасности.

Пример:

public class Greeter {

  @Context
  SecurityContext sc;

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public String sayHello() {

    // this will set the user id as userName
    String userName = sc.getUserPrincipal().getName();

    if (sc.getUserPrincipal() instanceof KeycloakPrincipal) {
      KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>)  sc.getUserPrincipal();

      // this is how to get the real userName (or rather the login name)
      userName = kp.getKeycloakSecurityContext().getIdToken().getPreferredUsername();
    }

    return "{ message : \"Hello " + userName + "\" }";
}

Для распространения контекста безопасности необходимо иметь домен безопасности, настроенный так, как описано в: Конфигурация адаптера JBoss/Wildfly

Ответ 2

Вы также можете установить свойство principal-attribute в файле keycloak.json вашего веб-приложения на preferred_username.