Spring OAuth2 OIDC — получение информации о пользователе и информации о группе AD для авторизации
Я новичок в Spring boot и Spring Security. У меня есть проект микросервиса, использующий Spring boot. И в моем шлюзовом приложении я использую OAuth2 для аутентификации. Поставщик аутентификации принадлежит моей организации и является реализацией OIDC.
Я использую сервер ресурсов oauth2 для аутентификации токена-носителя путем настройки свойств jwk-set-uri и jwk-set-uri .
- весна-загрузка-стартер-веб => 2.6.7
- spring-boot-starter-oauth2-resource-server => 2.6.7
- пружинная безопасность => 5.6.3
приложение.свойства
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>
С приведенной выше конфигурацией аутентификация работает нормально. Поэтому я также не добавлял никаких классов конфигурации безопасности. Но для авторизации и другой обработки, например для получения пользовательских данных в контроллере, мне нужна информация о пользователе и сведения о группе AD.
У меня есть URL-адрес конечной точки информации о пользователе. И когда я тестирую его в почтовом клиенте, ответ содержит информацию о пользователе вместе с группами 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();
}
}
Теперь вы сможете получать утверждения jwt в своих контроллерах с аннотацией @AuthenticationPrincipal.
@RestController
public class YourController {
@GetMapping("/")
public String doAnything(@AuthenticationPrincipal Jwt jwt) {
return jwt.getSubject();
}
}
Пожалуйста, добавьте больше информации, и я постараюсь объяснить это лучше :-)
==== UPD ====
Действительно полезный официальный мануал по этому поводу.
Официальные образцы кода