Spring에서 OAuth 로그인 기능 구현을 위한 공통 설정

TopOfTheHead·2026년 5월 21일

Spring OAuth

목록 보기
5/12

리디렉션 URI :
권한승인부여코드 과정OAuth Client ( = 백엔드 )에서 권한승인부여코드를 송신하는 OAuth Provider( = Authorization Server )의 URI

Spring에서 application.yml에 정의

  • 리디렉션 URI 양식 :
    "{baseUrl}/{action}/oauth2/code/{registrationId}"\
    baseUrl : 현재 백엔드 서버 URL ( ex. http://localhost:8080 )
    action : OAuth 동작 경로 ( login / logout 여부 )
    registrationId : OAuth Provider ID ( ex. google, kakao, ... etc )

  • 구글 GCP에 등록할 Redirection URI :
    "http://localhost:8080/login/oauth2/code/google"

  • 카카오에 등록할 Redirection URI :
    "http://localhost:8080/login/oauth2/code/kakao"

  • 네이버에 등록할 Redirection URI
    "http://localhost:8080/login/oauth2/code/naver"

OAuth2 Client
Spring ApplicationOAuth 2.0 클라이언트 역할을 수행할 수 있도록 지원하는 Spring Boot Starter

implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

OAuth2 사용 시 yml 파일 설정
。 다음 내용 정의 이후 Auto Configuration에 의해 Spring Bean으로서 설정정보 등록

spring:
  security:
    oauth2:
      client:
        registration:
  	      kakao:
            client-id: ${인증서버 ClientID}
            client-secret: ${인증서버 Client Secret Key}
            authorization-grant-type: authorization_code
            client-authentication-method: client_secret_post
            redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}" 
            scope:
              - 자원명1
              - 자원명2
  					...
        provider:
          kakao:
            authorization-uri: OAuth Provider 로그인 페이지 URI
            user-name-attribute: id
            token-uri: OAuth Provider Access Token 획득 URI
            user-info-uri: OAuth Provider 사용자 정보 획득 URI

spring: security: oauth2: client:
Spring Security OAuth2 Client 설정 시작 경로
OAuth 로그인을 위해 OAuth Provider( ex. google )에 전달할 OAuth Client(= 백엔드) 정보 정의


registration: OAuthProvider명 :
。각 OAuth Provider( ex. google , kakao, ... etc )에 전달할 OAuth Client 정보를 정의
"우리 서비스가 OAuth 서버에 어떻게 로그인 요청을 보낼 것인가?"

。내부적으로 registrationId = "OAuthProvider명"으로 설정
redirect URI/login/oauth2/code/OAuthProvider명로 동적으로 지정

client: provider 별로 복수 등록 가능

  • client-id :
    OAuth Provider에서 식별 용도로 발급한 Client ID를 정의
    OAuth Providerclient-id를 통해 어떤 어플리케이션에서 로그인 요청했는지 식별

  • client-secret :
    OAuth Provider에서 제공한 Client Secret Key 입력

  • authorization-grant-type: authorization_code
    OAuth 인증 방식을 결정
    OAuth Client에서 권한 획득 시 권한부여승인코드 방식으로 획득하도록 설정

  • client-authentication-method: client_secret_post
    Access Token 요청 시 client_id, client_secret_key전달 방식을 결정
    HTTP Message Body에 포함해서 전송하도록 설정

  • redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
    권한승인부여코드를 송신할 OAuth Provider URI

  • scope: 권한명
    OAuth Resource Server에게 요청할 사용자 정보 권한 범위 지정


    provider: OAuthProvider명
    Spring에게 전달할 OAuth Provider 정보를 지정

    Spring에서 기본적으로 googleprovider로 등록되었음으로 정의할 필요가 없다.
    ▶ 단. kakao 처럼 Spring OAuth에 등록된 서비스가 아닌 경우 provider의 경우도 기입해야한다.

  • authorization-uri
    Resource Owner( = 사용자 )가 로그인OAuth Provider로그인 페이지로 전송하는 OAuth Provider URI를 지정

  • token-uri :
    OAuth ClientAccess Token을 요청하기 위해 권한부여승인코드를 전송하는 OAuth Provider URI를 지정

  • user-info-uri :
    OAuth ClientResource Server에서 사용자 정보를 요청하기위해 Access Token를 전송하는 OAuth Provider URI를 지정

  • user-name-attribute: 고유 식별자
    OAuth 사용자 식별용 Key 지정

Spring Security에서 필터체인OAuth 인증 활성화

@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http){
        return http
                .oauth2Login(Customizer.withDefaults())
                //
   				.build();
    }
}
  • HTTPSecurity객체.oauth2Login(Customizer.withDefaults())
    Spring Security에서 Oauth 2.0 로그인 기능을 활성화하는 메서드

    ▶ 다음 설정을 끝낸 후 localhost:8080/login 접속 시 해당 API보호하기위해 application.yml에 등록된 OAuth2 Provider ( ex. Google 등 )에 의해 로그인 옵션이 자동으로 표시됨.

    localhost:8080/logout 접속 시 로그아웃을 수행.
profile
공부기록 블로그

0개의 댓글