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

| 구분 | 서비스명 | 설명 |
|---|---|---|
| 글로벌 | Google OAuth 2.0 | Gmail, YouTube 등에서 제 3자 앱이 사용자 구글 계정에 접근하도록 허용 |
| 글로벌 | Facebook Login | 페이스북 계정으로 외부 웹사이트나 앱에 로그인 지원 |
| 글로벌 | GitHub OAuth App | 개발자 도구나 CI/CD 서비스에서 GitHub 계정 인증 및 저장소 접근 제공 |
| 국내 | Kakao OAuth | 카카오 계정을 이용한 로그인 및 사용자 정보(프로필, 이메일 등) 제공 |
| 국내 | Naver Login API | 네이버 계정을 기반으로 외부 서비스 로그인 및 사용자 정보 연동 지원 |
사용자(User) : 자신의 자원 접근을 제3자 애플리케이션에 위임하는 주체이다.
클라이언트(Client) : 사용자의 인가를 받아 보호된 자원에 접근하려는 애플리케이션이다.
인가 서버(Authorization Server) : 사용자 인증과 인가를 수행하고 Access Token을 발급하는 서버이다.
리소스 서버(Resource Server) : Access Token을 검증하고 보호된 사용자 데이터를 제공하는 서버이다.

클라이언트 ID(Client ID) : 인가 서버가 클라이언트를 식별하기 위해 발급하는 고유 식별자이다.
클라이언트 시크릿(Client Secret) : 인가 서버와 클라이언트 간의 신뢰를 검증하기 위해 사용하는 비밀키이다.
Scope는 클라이언트가 리소스 서버에 요청할 때 사용자 데이터 접근 범위를 명시하는 설정이다.
OAuth에서 Scope는 허용된 권한의 한계를 정의하여 최소 권한 원칙을 보장한다.
| 구분 | Scope 예시 | 설명 |
|---|---|---|
| 기본 정보 | profile, email | 사용자 이름, 이메일 등 기본 프로필 접근 |
| 소셜 서비스 | friends, photos | 친구 목록, 사진 앨범 등 SNS 리소스 접근 |
| 오픈ID | openid | 사용자 인증용 ID Token 요청 (OIDC에서 사용) |
| 오프라인 접근 | offline_access | Refresh Token 발급 허용 |
| 커스텀 | read:posts, write:comments | 특정 리소스 읽기· 쓰기 권한 |
OAuth 워크플로우는 클라이언트가 사용자 대신 리소스에 접근하기 위해 인가 코드를 발급받고 토큰을 교환하는 과정이다. 단계는 아래와 같다.

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

Google OAuth2는 구글 계정을 인증 제공자로 사용하여 외부 애플리케이션의 인증을 위임하는 표준 인증·인가 프로토콜이다.
사용자는 아이디와 비밀번호를 애플리케이션에 직접 제공하지 않고 토큰 기반으로 접근 권한을 부여한다.
이를 통해 보안성을 강화하면서 간편한 로그인과 사용자 정보 연동을 구현할 수 있다.
카카오 OAuth는 카카오 계정을 인증 제공자로 사용하여 외부 애플리케이션의 인증을 위임하는 OAuth 2.0 기반 인증 방식이다. 사용자는 서비스에 비밀번호를 직접 제공하지 않고 카카오가 발급한 토큰으로 인증된다.
| 항목명 | JSON Key | 설명 |
|---|---|---|
| 사용자 고유 ID | sub | Google이 발급한 전역적으로 유일한 사용자 식별자입니다. 애플리케이션 내부 사용자 식별용으로 사용됩니다. |
| 이메일 | email | Google 계정에 등록된 이메일 주소입니다. |
| 이메일 인증 여부 | email_verified | 해당 이메일이 Google에 의해 검증 완료되었는지 여부를 나타냅니다. |
| 전체 이름 | name | 이름과 성이 합쳐진 전체 이름입니다. |
| 이름 | given_name | First Name(이름)에 해당합니다. |
| 성 | family_name | Last Name(성)에 해당합니다. |
| 프로필 이미지 | picture | 사용자 프로필 사진의 URL입니다. |
| 언어·지역 | locale | 사용자 계정에 설정된 언어 및 지역 정보입니다. |
| 구분 | 필드 경로 | 설명 |
|---|---|---|
| 사용자 고유 ID | id | 카카오에서 발급한 사용자 고유 식별자입니다. |
| 연결 시각 | connected_at | 서비스와 카카오 계정이 최초로 연결된 시각입니다. |
| 닉네임 | kakao_account.profile.nickname | 카카오 계정에 설정된 프로필 닉네임입니다. |
| 프로필 이미지 | kakao_account.profile.profile_image_url | 사용자 프로필 원본 이미지 URL입니다. |
| 썸네일 이미지 | kakao_account.profile.thumbnail_image_url | 사용자 프로필 썸네일 이미지 URL입니다. |












