본문 바로가기
스프링 부트3

스프링 부트 3와 Google OAuth2 통합

by 굿센스굿 2024. 12. 11.
반응형

 

스프링 부트 3는 웹 애플리케이션을 빠르고 간단하게 개발할 수 있는 강력한 프레임워크로, 보안 관련 기능도 손쉽게 구현할 수 있습니다. 그중 하나가 Google OAuth2를 활용한 인증 및 권한 관리입니다. 이 글에서는 스프링 부트 3에서 Google OAuth2를 통합하는 방법을 단계별로 설명하며, 실제 애플리케이션에 적용할 수 있는 예시를 제공합니다.


1. Google OAuth2란?

OAuth2는 제3자 인증 방식을 통해 사용자 인증 및 권한 부여를 처리하는 프로토콜입니다. Google OAuth2는 이를 구현한 Google의 인증 서비스로, 사용자가 Google 계정을 통해 다른 애플리케이션에 로그인하거나 데이터를 공유할 수 있도록 돕습니다.

Google OAuth2를 사용하는 이유:

  • 비밀번호를 저장하지 않아도 돼 보안성을 높일 수 있습니다.
  • 사용자의 편의성을 제공합니다(Google 계정으로 간편 로그인).
  • 인증 로직을 자체적으로 구현할 필요가 없어 개발 시간을 절약합니다.

2. 스프링 부트 3에서 Google OAuth2 통합 단계

스프링 부트 3와 Google OAuth2를 통합하기 위해 아래 단계를 따릅니다.

2.1 Google Cloud에서 OAuth 클라이언트 생성

  1. Google Cloud Console에 접속합니다.
  2. 새 프로젝트를 생성하거나 기존 프로젝트를 선택합니다.
  3. API 및 서비스 → 사용자 인증 정보로 이동합니다.
  4. 사용자 인증 정보 만들기OAuth 클라이언트 ID를 선택합니다.
  5. 애플리케이션 유형을 웹 애플리케이션으로 선택합니다.
  6. 리디렉션 URI를 추가합니다. 예: http://localhost:8080/login/oauth2/code/google
  7. 클라이언트 ID와 클라이언트 Secret을 저장합니다.

2.2 프로젝트 설정

스프링 부트 프로젝트에 종속성 추가

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

application.yml 설정
Google 클라이언트 정보를 애플리케이션에 등록합니다.

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: 
            client-secret: 
            scope:
              - email
              - profile
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
        provider:
          google:
            authorization-uri: https://accounts.google.com/o/oauth2/auth
            token-uri: https://oauth2.googleapis.com/token
            user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo

2.3 SecurityConfig 클래스 작성

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 SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(authorize -> authorize
                .requestMatchers("/").permitAll()
                .anyRequest().authenticated()
            )
            .oauth2Login(); // OAuth2 설정 활성화
        return http.build();
    }
}

3. 예제: Google OAuth2 통합

예제 1: 기본 로그인 기능 구현

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;

@RestController
public class HomeController {
    @GetMapping("/")
    public String home() {
        return "Google OAuth2 로그인 예제!";
    }

    @GetMapping("/user")
    public String user(OAuth2AuthenticationToken authentication) {
        return "안녕하세요, " + authentication.getPrincipal().getAttributes().get("name") + "님!";
    }
}
  1. 기본 URL /에 접속하면 "Google OAuth2 로그인 예제!" 메시지가 표시됩니다.
  2. /user URL에 접속하면 로그인한 사용자의 이름을 출력합니다.

예제 2: 사용자 정보 커스터마이징

Google에서 제공하는 사용자 정보를 가져와 커스터마이징합니다.

import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;

@Service
public class CustomOAuth2UserService {
    public String getUserInfo(OAuth2User user) {
        String email = user.getAttribute("email");
        String name = user.getAttribute("name");
        return "사용자 정보: 이름 - " + name + ", 이메일 - " + email;
    }
}

예제 3: 리디렉션 후 대시보드로 이동

로그인 후 대시보드 페이지로 리디렉션합니다.

@GetMapping("/dashboard")
public String dashboard(OAuth2AuthenticationToken authentication) {
    return "대시보드: " + authentication.getPrincipal().getAttributes().get("name");
}

SecurityConfig 수정

.oauth2Login()
    .defaultSuccessUrl("/dashboard", true); // 성공 시 대시보드로 이동

4. 추가 고려 사항

  1. 세션 관리
    OAuth2 로그인은 기본적으로 세션 기반으로 작동하므로, 대규모 트래픽을 처리할 경우 Redis와 같은 외부 세션 저장소를 사용하는 것이 좋습니다.
  2. 토큰 저장소
    Google에서 발급한 액세스 토큰을 활용해 사용자 데이터를 API 호출로 가져올 수 있습니다.
  3. HTTPS 사용
    OAuth2는 민감한 정보를 다루므로 배포 환경에서 HTTPS를 필수로 사용해야 합니다.

5. 결론

스프링 부트 3와 Google OAuth2를 통합하면 보안성과 편의성을 갖춘 인증 시스템을 간단히 구축할 수 있습니다. 이 글에서 다룬 단계를 따라 기본적인 설정을 적용한 뒤, 예제들을 기반으로 애플리케이션에 맞게 확장해보세요.

Google OAuth2를 통해 안전하고 직관적인 사용자 인증 기능을 구축하는 데 성공하시길 바랍니다! 😊

반응형