Как получить информацию о пользователе, такую ​​как имя и адрес электронной почты, в Spring Boot, который служит REST API и использует сервер ресурсов oauth2?

У меня есть приложение Spring Boot, которое предоставляет REST API и использует Cognito и oauth2-resource-server.

Мои ресурсы защищены и работают правильно при доступе с помощью access_token . У меня есть общий SecurityConfig:

      @Configuration
public class JWTSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests(authz -> authz.antMatchers(HttpMethod.GET, "/foos/**")
            .hasAuthority("SCOPE_read")
            .antMatchers(HttpMethod.POST, "/foos")
            .hasAuthority("SCOPE_write")
            .anyRequest()
            .authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.jwt());
        return http.build();
    }
}

Однако мне нужно получить дополнительную информацию о пользователе, такую ​​как имя и адрес электронной почты, которые доступны либо в конечной точке userInfo , либо в id_token (не в access_token).

В настоящее время в качестве обходного пути я делаю HTTP-вызов RestTemplate к конечной точке userinfo.https://{{user_pool_domain}}.auth.{{region}}.amazoncognito.com/oauth2/userinfoчтобы получить эту информацию.

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

Как я могу получить эту информацию о пользователе без жесткого кодирования HTTP-вызова?

1 ответ

Я написал руководство с другим подходом: клиент отправляет токен идентификатора в дополнение к токену доступа (в другом заголовке), а затем Spring Security проверяет оба токена и выполняет сборку.Authenticationэкземпляр, использующий оба набора утверждений (из токенов доступа и идентификаторов).

Это полезно для Cognito, для которого вы можете настраивать только утверждения токенов идентификатора, и гораздо эффективнее, чем вызывать Cognito для каждого входящего запроса к вашим серверам ресурсов.

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