From bc9dc5e37ae14dc7a30e222128dca2b6d34566e5 Mon Sep 17 00:00:00 2001 From: Julien WITTOUCK Date: Thu, 17 Aug 2023 17:45:39 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=92=20:=20configure=20OAuth2Authorized?= =?UTF-8?q?ClientManager=20to=20access=20an=20oauth2=20authorized=20client?= =?UTF-8?q?=20(end-user)=20out=20of=20the=20scope=20of=20a=20HttpServletRe?= =?UTF-8?q?quest.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/WebSecurityConfiguration.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) 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 index cbf41fc..a2f1f3b 100644 --- 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.Enabl 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,11 +53,44 @@ public class WebSecurityConfiguration implements WebMvcConfigurer { .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(); -- 2.51.2