我是Spring boot和Spring Security的新手。我有使用Spring boot的微服务项目。在我的网关应用程序中,我使用OAuth2进行身份验证。身份验证提供程序来自我的组织,它是OIDC实现。
我正在使用oaut2资源服务器通过配置jwk-set-uri和jwk-set-uri属性来验证承载令牌。
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组。
如何获取授权的用户详细信息?
好的。
您已经添加了所需的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====
非常有用的官方手册。
官方代码示例