Как получить токен Keycloak весной

У меня есть приложение Spring с интерфейсом Angular, я защитил две стороны с помощью Keycloak 11.0.2, как я могу получить информацию о токене, когда запрос отправляется из интерфейса, например, я хочу получить доступ к информации и атрибутам аутентифицированного пользователя на стороне Spring, потому что я возвращаемый запрос зависит от атрибутов пользователей.

Ниже моя конфигурация весной:

keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=myapp
keycloak.resource=myapp-api
keycloak.ssl-required=external
keycloak.bearer-only=true
keycloak.principal-attribute=preferred_username


@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true)
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests().anyRequest().permitAll();
        http.csrf().disable();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new NullAuthenticatedSessionStrategy();
    }

    @Bean
    public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
698
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основываясь на вашем вопросе, я думаю, вы имеете в виду токен идентификатора, который вы можете получить (например) из запроса. Проверьте следующий пример:

@GetMapping(path = "/student")
public String teen(HttpServletRequest request) throws ServletException {
       KeycloakAuthenticationToken token = (KeycloakAuthenticationToken) request.getUserPrincipal();
       System.out.println("---- ROLES ----");
       token.getAccount().getRoles().forEach(System.out::println);
       Map<String, Object> otherClaims = token.getAccount().getKeycloakSecurityContext().getIdToken().getOtherClaims();

       Enumeration<String> attributeNames = request.getAttributeNames();
       while (attributeNames.hasMoreElements())
            System.out.println(attributeNames.nextElement());

       for(String s : otherClaims.keySet()){
            System.out.println(s);
            System.out.println(otherClaims.get(s).toString());
       }

       System.out.println("------------");
       return "student";
    }

Приведенный выше код является всего лишь примером, но он демонстрирует некоторые функциональные возможности API.

Другие вопросы по теме