Spring Security 如何在作为REST API并利用oauth2-resource-server的Sping Boot 中检索用户信息,例如姓名和电子邮件?

dxpyg8gm  于 2023-06-29  发布在  Spring
关注(0)|答案(1)|浏览(133)

我有一个Sping Boot 应用程序,它提供了一个REST API,并使用了cognitooauth2-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调用进行硬编码的情况下获得此用户信息?

0dxa2lsx

0dxa2lsx1#

我用另一种方法编写了a tutorial:让客户端发送ID令牌和访问令牌(在不同的头中),然后让Spring Security验证两个令牌并使用两组声明(从访问令牌和ID令牌)构建Authentication示例。
这对于Cognito很有用,因为您可以仅自定义ID令牌声明,并且比为每个传入资源服务器的请求调用Cognito更有效。

相关问题