Как получить информацию о пользователе, такую как имя и адрес электронной почты, в 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 для каждого входящего запроса к вашим серверам ресурсов.