ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SpringSecurity OAuth2.0 - 2
    BackEnd/SpringSecurity 2023. 7. 9. 13:45

    1. 로그인페이지 커스텀

    1.1 기본 로그인

    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();
    }
    }

     

    위와같이 설정후 /login으로 접근시 기본으로 설정된 페이지를 확인할 수 있다.

    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;
    }

    댓글

Designed by Tistory.