[강의] Spring Oauth2

Jerry·2025년 12월 16일

Spring Oauth2

OAuth의 개념과 필요성

Oauth의 정의와 목적

OAuth는 사용자 자격 증명을 직접 노출하지 않고, 제 3자 애플리케이션이 제한된 권한으로 자원에 접근할 수 있도록 하는 인증 위임 프로토콜이다. Access Token을 기반으로 안전하게 API 자원에 접근할 수 있도록 설계되었다. RFC 6749 표준에 따라 다양한 플랫폼 간 인증 연동을 지원한다.

OAuth를 사용하는 서비스 사례

구분서비스명설명
글로벌Google OAuth 2.0Gmail, YouTube 등에서 제 3자 앱이 사용자 구글 계정에 접근하도록 허용
글로벌Facebook Login페이스북 계정으로 외부 웹사이트나 앱에 로그인 지원
글로벌GitHub OAuth App개발자 도구나 CI/CD 서비스에서 GitHub 계정 인증 및 저장소 접근 제공
국내Kakao OAuth카카오 계정을 이용한 로그인 및 사용자 정보(프로필, 이메일 등) 제공
국내Naver Login API네이버 계정을 기반으로 외부 서비스 로그인 및 사용자 정보 연동 지원

OAuth 주체와 설정

OAuth의 주요 주체 (유저, 클라이언트, 인가 서버, 리소스 서버)

사용자(User) : 자신의 자원 접근을 제3자 애플리케이션에 위임하는 주체이다.
클라이언트(Client) : 사용자의 인가를 받아 보호된 자원에 접근하려는 애플리케이션이다.
인가 서버(Authorization Server) : 사용자 인증과 인가를 수행하고 Access Token을 발급하는 서버이다.
리소스 서버(Resource Server) : Access Token을 검증하고 보호된 사용자 데이터를 제공하는 서버이다.

Client ID와 Client Secret

클라이언트 ID(Client ID) : 인가 서버가 클라이언트를 식별하기 위해 발급하는 고유 식별자이다.
클라이언트 시크릿(Client Secret) : 인가 서버와 클라이언트 간의 신뢰를 검증하기 위해 사용하는 비밀키이다.

권한 범위(Scope) 설정

Scope는 클라이언트가 리소스 서버에 요청할 때 사용자 데이터 접근 범위를 명시하는 설정이다.
OAuth에서 Scope는 허용된 권한의 한계를 정의하여 최소 권한 원칙을 보장한다.

구분Scope 예시설명
기본 정보profile, email사용자 이름, 이메일 등 기본 프로필 접근
소셜 서비스friends, photos친구 목록, 사진 앨범 등 SNS 리소스 접근
오픈IDopenid사용자 인증용 ID Token 요청 (OIDC에서 사용)
오프라인 접근offline_accessRefresh Token 발급 허용
커스텀read:posts, write:comments특정 리소스 읽기· 쓰기 권한

OAuth 워크플로우

OAuth 워크플로우는 클라이언트가 사용자 대신 리소스에 접근하기 위해 인가 코드를 발급받고 토큰을 교환하는 과정이다. 단계는 아래와 같다.

단계설명
1단계클라이언트가 사용자에게 권한 요청
2단계사용자가 접근 승인 및 인가 코드 발급
3단계클라이언트가 인가 코드를 서버로 전달
4단계인가 서버가 Access Token 발급
5단계클라이언트가 토큰으로 리소스 요청
6단계리소스 서버가 요청 자원 응답

Spring OAuth2

Spring OAuth2는 외부 인증 제공자(Google, GitHub 등)를 통해 사용자 인증을 위임하는 표준 인증·인가 메커니즘이다. Spring Security OAuth2는 인증 과정에서 토큰 기반 접근 제어를 적용하여 비밀번호를 직접 다루지 않도록 한다. 이를 통해 애플리케이션은 보안성을 유지하면서 인증 로직을 단순화하고 확장성을 확보한다. → 표준적인 OAuth2.0라면 인가 과정을 직접 구현하지 않아도되서 코드가 매우 단축된다.

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-security'
  implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
}

Spring OAuth2 인가 과정

Google OAuth2

Google OAuth2는 구글 계정을 인증 제공자로 사용하여 외부 애플리케이션의 인증을 위임하는 표준 인증·인가 프로토콜이다.
사용자는 아이디와 비밀번호를 애플리케이션에 직접 제공하지 않고 토큰 기반으로 접근 권한을 부여한다.
이를 통해 보안성을 강화하면서 간편한 로그인과 사용자 정보 연동을 구현할 수 있다.

Google OAuth2 인가 시 받는 항목

Kakao OAuth2

카카오 OAuth는 카카오 계정을 인증 제공자로 사용하여 외부 애플리케이션의 인증을 위임하는 OAuth 2.0 기반 인증 방식이다. 사용자는 서비스에 비밀번호를 직접 제공하지 않고 카카오가 발급한 토큰으로 인증된다.

항목명JSON Key설명
사용자 고유 IDsubGoogle이 발급한 전역적으로 유일한 사용자 식별자입니다. 애플리케이션 내부 사용자 식별용으로 사용됩니다.
이메일emailGoogle 계정에 등록된 이메일 주소입니다.
이메일 인증 여부email_verified해당 이메일이 Google에 의해 검증 완료되었는지 여부를 나타냅니다.
전체 이름name이름과 성이 합쳐진 전체 이름입니다.
이름given_nameFirst Name(이름)에 해당합니다.
family_nameLast Name(성)에 해당합니다.
프로필 이미지picture사용자 프로필 사진의 URL입니다.
언어·지역locale사용자 계정에 설정된 언어 및 지역 정보입니다.

Kakao OAuth2 인가시 받는 항목

구분필드 경로설명
사용자 고유 IDid카카오에서 발급한 사용자 고유 식별자입니다.
연결 시각connected_at서비스와 카카오 계정이 최초로 연결된 시각입니다.
닉네임kakao_account.profile.nickname카카오 계정에 설정된 프로필 닉네임입니다.
프로필 이미지kakao_account.profile.profile_image_url사용자 프로필 원본 이미지 URL입니다.
썸네일 이미지kakao_account.profile.thumbnail_image_url사용자 프로필 썸네일 이미지 URL입니다.
  • 이메일, 성별, 연령대, 생일, 전화번호는 추가 동의 항목이다. → 예전에는 개발 계정으로 받을 수 있었는데 지금은 악용으로 인해 막혔다.
  • 내부 사용자 식별자는 이메일이 아닌 id(카카오 고유 ID) 사용이 권장된다.

Google Oauth2 설정

Google OAuth2 설정













profile
Backend engineer

0개의 댓글