diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/ui/WebSecurityConfiguration.java b/src/main/java/fr/univ_lille/gitlab/classrooms/ui/WebSecurityConfiguration.java --- a/src/main/java/fr/univ_lille/gitlab/classrooms/ui/WebSecurityConfiguration.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/ui/WebSecurityConfiguration.java @@ -8,8 +8,7 @@ import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.client.JdbcOAuth2AuthorizedClientService; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; +import org.springframework.security.oauth2.client.*; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; @@ -54,10 +53,43 @@ }) .build(); } + /** + * OAuth2AuthorizedClientService is used to store oauth2 authorized clients (end-users). + * This implementation uses the database instead of in-memory which is the default. + * + * @param jdbcOperations + * @param clientRegistrationRepository + * @return a JdbcOAuth2AuthorizedClientService + * @see Spring Documentation + * @see OAuth2AuthorizedClientService + */ @Bean OAuth2AuthorizedClientService oAuth2AuthorizedClientService(JdbcOperations jdbcOperations, ClientRegistrationRepository clientRegistrationRepository) { return new JdbcOAuth2AuthorizedClientService(jdbcOperations, clientRegistrationRepository); } + + /** + * OAuth2AuthorizedClientManager is used to access an oauth2 authorized client (end-user), out of the scope of a HttpServletRequest. It will also refresh the token if needed. + * @param authorizedClientService + * @param clientRegistrationRepository + * @return + */ + @Bean + OAuth2AuthorizedClientManager oAuth2AuthorizedClientManager(OAuth2AuthorizedClientService authorizedClientService, ClientRegistrationRepository clientRegistrationRepository) { + OAuth2AuthorizedClientProvider authorizedClientProvider = + OAuth2AuthorizedClientProviderBuilder.builder() + .authorizationCode() + .refreshToken() + .build(); + + AuthorizedClientServiceOAuth2AuthorizedClientManager authorizedClientManager = + new AuthorizedClientServiceOAuth2AuthorizedClientManager( + clientRegistrationRepository, authorizedClientService); + authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider); + + return authorizedClientManager; + } + private OAuth2UserService userService() { var delegate = new DefaultOAuth2UserService();