Spring

Spring Boot 구글 OAuth2 로그인 구현 방법(spring-securify-oauth2)

randev 2023. 2. 16. 14:04

Spring을 사용하여 Google에 로그인하려면 Google 인증을 위한 OAuth2 프로토콜 구현을 제공하는 Spring Social Google 라이브러리를 사용할 수 있습니다.

먼저 Spring Security OAuth2 클라이언트와 Google 라이브러리를 pom.xml에 종속성으로 추가해야 합니다

<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    <version>2.5.4</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.5.4</version>
</dependency>

<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-google</artifactId>
    <version>1.0.0.RELEASE</version>
</dependency>

 

이 예에서는 먼저 아래와 같이 application.yml 파일에 Google 클라이언트 ID와 클라이언트 암호를 작성해두어야합니다.

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: <your-client-id>
            client-secret: <your-client-secret>
            scope:
            - email
            - profile
        provider:
          google:
            authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
            token-uri: https://www.googleapis.com/oauth2/v4/token
            user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
            user-name-attribute: sub

그런 다음 로그인 흐름을 처리하기 위한 새 컨트롤러를 생성합니다

@Controller
public class LoginController {

    @GetMapping("/login")
    public String login() {
        return "login";
    }
}

이 예에서 login() 메서드는 "Login with Google" 단추를 표시하는 Thymelleaf 템플릿(login.html)의 이름을 반환합니다.


마지막으로 Google 공급자를 사용하도록 Spring Security를 구성해야 합니다. SecurityConfig.java에 다음 구성을 추가합니다:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/", "/login**")
            .permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .oauth2Login()
            .loginPage("/login")
            .defaultSuccessURL("/home")
            .userInfoEndpoint()
            .userService(googleUserService());
    }

    private OAuth2UserService<OAuth2UserRequest, OAuth2User> googleUserService() {
        return new GoogleOAuth2UserService();
    }
}

이 예에서 configure() 메서드는 인증되지 않은 액세스를 허용하도록 Spring Security를 구성합니다. 그리고 루트 페이지(/) 및 로그인 페이지(/login)에 인증을 적용합니다. 마지막으로 기본 성공 URL(/home) 및 Google을 지정하여 OAuth2 로그인 흐름을 설정합니다

이러한 구성을 사용하면 이제 사용자가 Google 자격 증명을 사용하여 응용 프로그램에 로그인할 수 있습니다.