123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- [[webflux-oauth2-client]]
- = OAuth 2.0 Client
- :page-section-summary-toc: 1
- The OAuth 2.0 Client features provide support for the Client role as defined in the https://tools.ietf.org/html/rfc6749#section-1.1[OAuth 2.0 Authorization Framework].
- At a high-level, the core features available are:
- .Authorization Grant support
- * https://tools.ietf.org/html/rfc6749#section-1.3.1[Authorization Code]
- * https://tools.ietf.org/html/rfc6749#section-6[Refresh Token]
- * https://tools.ietf.org/html/rfc6749#section-1.3.4[Client Credentials]
- * https://tools.ietf.org/html/rfc6749#section-1.3.3[Resource Owner Password Credentials]
- * https://datatracker.ietf.org/doc/html/rfc7523#section-2.1[JWT Bearer]
- .Client Authentication support
- * https://datatracker.ietf.org/doc/html/rfc7523#section-2.2[JWT Bearer]
- .HTTP Client support
- * <<oauth2Client-webclient-webflux, `WebClient` integration for Reactive Environments>> (for requesting protected resources)
- The `ServerHttpSecurity.oauth2Client()` DSL provides a number of configuration options for customizing the core components used by OAuth 2.0 Client.
- The following code shows the complete configuration options provided by the `ServerHttpSecurity.oauth2Client()` DSL:
- .OAuth2 Client Configuration Options
- [tabs]
- ======
- Java::
- +
- [source,java,role="primary"]
- ----
- @EnableWebFluxSecurity
- public class OAuth2ClientSecurityConfig {
- @Bean
- public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
- http
- .oauth2Client(oauth2 -> oauth2
- .clientRegistrationRepository(this.clientRegistrationRepository())
- .authorizedClientRepository(this.authorizedClientRepository())
- .authorizationRequestRepository(this.authorizationRequestRepository())
- .authenticationConverter(this.authenticationConverter())
- .authenticationManager(this.authenticationManager())
- );
- return http.build();
- }
- }
- ----
- Kotlin::
- +
- [source,kotlin,role="secondary"]
- ----
- @EnableWebFluxSecurity
- class OAuth2ClientSecurityConfig {
- @Bean
- fun securityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
- return http {
- oauth2Client {
- clientRegistrationRepository = clientRegistrationRepository()
- authorizedClientRepository = authorizedClientRepository()
- authorizationRequestRepository = authorizedRequestRepository()
- authenticationConverter = authenticationConverter()
- authenticationManager = authenticationManager()
- }
- }
- }
- }
- ----
- ======
- The `ReactiveOAuth2AuthorizedClientManager` is responsible for managing the authorization (or re-authorization) of an OAuth 2.0 Client, in collaboration with one or more `ReactiveOAuth2AuthorizedClientProvider`(s).
- The following code shows an example of how to register a `ReactiveOAuth2AuthorizedClientManager` `@Bean` and associate it with a `ReactiveOAuth2AuthorizedClientProvider` composite that provides support for the `authorization_code`, `refresh_token`, `client_credentials` and `password` authorization grant types:
- [tabs]
- ======
- Java::
- +
- [source,java,role="primary"]
- ----
- @Bean
- public ReactiveOAuth2AuthorizedClientManager authorizedClientManager(
- ReactiveClientRegistrationRepository clientRegistrationRepository,
- ServerOAuth2AuthorizedClientRepository authorizedClientRepository) {
- ReactiveOAuth2AuthorizedClientProvider authorizedClientProvider =
- ReactiveOAuth2AuthorizedClientProviderBuilder.builder()
- .authorizationCode()
- .refreshToken()
- .clientCredentials()
- .password()
- .build();
- DefaultReactiveOAuth2AuthorizedClientManager authorizedClientManager =
- new DefaultReactiveOAuth2AuthorizedClientManager(
- clientRegistrationRepository, authorizedClientRepository);
- authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
- return authorizedClientManager;
- }
- ----
- Kotlin::
- +
- [source,kotlin,role="secondary"]
- ----
- @Bean
- fun authorizedClientManager(
- clientRegistrationRepository: ReactiveClientRegistrationRepository,
- authorizedClientRepository: ServerOAuth2AuthorizedClientRepository): ReactiveOAuth2AuthorizedClientManager {
- val authorizedClientProvider: ReactiveOAuth2AuthorizedClientProvider = ReactiveOAuth2AuthorizedClientProviderBuilder.builder()
- .authorizationCode()
- .refreshToken()
- .clientCredentials()
- .password()
- .build()
- val authorizedClientManager = DefaultReactiveOAuth2AuthorizedClientManager(
- clientRegistrationRepository, authorizedClientRepository)
- authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider)
- return authorizedClientManager
- }
- ----
- ======
|