我有一个Sping 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*)中可用。
目前,作为一种变通方法,我正在对userinfo端点https://{{user_pool_domain}}.auth.{{region}}.amazoncognito.com/oauth2/userinfo
进行RestTemplate HTTP调用以检索此信息。
然而,我相信Spring可能有一个内置的方法来自动处理这个问题,可能是缓存管理。
如何在不对HTTP调用进行硬编码的情况下获得此用户信息?
1条答案
按热度按时间0dxa2lsx1#
我用另一种方法编写了a tutorial:让客户端发送ID令牌和访问令牌(在不同的头中),然后让Spring Security验证两个令牌并使用两组声明(从访问令牌和ID令牌)构建
Authentication
示例。这对于Cognito很有用,因为您可以仅自定义ID令牌声明,并且比为每个传入资源服务器的请求调用Cognito更有效。