package io.security.oauth2.springsecurityoauth2; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration public class OAuth2ClientConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeRequests(authRequest -> authRequest .anyRequest() .authenticated()); http.oauth2Login(Customizer.withDefaults()); // Customizer 인터페이스 안에 withDefaults()로 두면 커스텀한 설정을 하지않겠다는 의미이다. return http.build(); } }
1.2 커스텀 로그인
package io.security.oauth2.springsecurityoauth2; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration public class OAuth2ClientConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeRequests(authRequest -> authRequest.antMatchers("/").permitAll().anyRequest().authenticated()); // 테스트를 위해 모든 페이지를 열어둔다. http.oauth2Login(oauth2 -> oauth2.loginPage("/login")); // 로그인 페이지 변경시 사용 (SPA사용시 새로운 페이지 사용X) return http.build(); } }
1.3 로그인 후 유저 정보 확인 테스트
@GetMapping("/user") public Authentication user(Authentication authentication) { OAuth2AuthenticationToken authentication2 = (OAuth2AuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); OAuth2AuthenticationToken authentication1 = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = (OAuth2User) authentication2.getPrincipal(); return authentication2; } // 같은 OAuth2User 상속받지만 명확한 인증방법의 구분을 위해서 OidcUser 사용 @GetMapping("/oauth2User") public OAuth2User user(@AuthenticationPrincipal OAuth2User oAuth2User) { // oauth2.0 provider 방식으로 받은경우 System.out.println("oAuth2User = " + oAuth2User); return oAuth2User; } @GetMapping("/oidcUser") public OAuth2User user(@AuthenticationPrincipal OidcUser oidcUser) { // openId connect 방식으로 인증을 받은 경우 System.out.println("oidcUser = " + oidcUser); return oidcUser; }