提问者:小点点

Spring OAuth2OIDC-获取用于授权的用户信息和AD组信息


我是Spring boot和Spring Security的新手。我有使用Spring boot的微服务项目。在我的网关应用程序中,我使用OAuth2进行身份验证。身份验证提供程序来自我的组织,它是OIDC实现。

我正在使用oaut2资源服务器通过配置jwk-set-uri和jwk-set-uri属性来验证承载令牌。

  • spring-boot-starter-web=

application.properties

spring.security.oauth2.resourceserver.jwt.issuer-uri=https://<org-auth-url>.com
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://<org-auth-url>/<jwk-uri>

使用上面的配置,身份验证工作正常。所以我也没有添加任何安全配置类。但是对于授权和其他处理,比如在Controller中获取用户数据,我需要用户信息和AD组详细信息。

我有用户信息endpointURL。当我在postman客户端测试它时,响应包含用户信息以及AD组。

如何获取授权的用户详细信息?


共1个答案

匿名用户

好的。

您已经添加了所需的uri。很好。

现在您需要添加一些配置:

@Configuration
@EnableWebSecurity
public class OAuth2ResourceServerSecurityConfiguration {

    @Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
    String jwkSetUri;

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        
        http
                .authorizeHttpRequests((authorize) -> authorize
                        .requestMatchers(HttpMethod.GET, 
                     ///// more your requestMatchers ///// 

                        .anyRequest().authenticated()
                )
                .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt);
        
        return http.build();
    }

    @Bean
    JwtDecoder jwtDecoder() {
        return NimbusJwtDecoder.withJwkSetUri(this.jwkSetUri).build();
    }

}

现在,您应该能够在控制器中使用@Authentication主体注释接收jwt声明。

@RestController
public class YourController {

    @GetMapping("/")
    public String doAnything(@AuthenticationPrincipal Jwt jwt) {
        return jwt.getSubject();
    }
}

请添加更多信息,我会试着更好地解释:-)

====UPD====

非常有用的官方手册。

官方代码示例