OAuth
📋 문서 버전
이 문서는 6개의 버전이 있습니다. 현재 버전 4을 보고 있습니다.
OAuth
개요
OAuth(Open Authorization)는 사용자의 인증 정보(예: 아이디와 비밀번호)를 공유하지 않고도 제3자 애플리케이션이 사용자 대신 리소스 서버에 접근할 수 있도록 허용하는 오픈 스탠더드 인증 프로토콜입니다. 주로 웹 및 모바일 애플리케이션에서 사용자의 데이터에 안전하게 접근하기 위해 사용되며, 사용자가 소셜 로그인(예: "구글로 로그인", "페이스북으로 로그인")을 할 때 뒷단에서 동작하는 핵심 기술입니다.
OAuth는 단순한 인증(Authentication)이 아닌 위임 기반의 권한 부여(Authorization) 프로토콜로, 사용자가 자신의 계정 정보를 노출하지 않으면서도 특정 서비스가 제한된 범위의 데이터에 접근할 수 있도록 허용합니다.
주요 개념
1. 등장 배경
전통적인 인증 방식에서는 사용자가 제3자 애플리케이션에 자신의 아이디와 비밀번호를 직접 제공해야 했습니다. 이는 보안상 큰 위험을 초래하며, 비밀번호 유출 시 여러 서비스가 동시에 위협받을 수 있습니다. OAuth는 이러한 문제를 해결하기 위해 개발되었으며, "비밀번호를 공유하지 않고 권한을 위임한다" 는 원칙을 기반으로 합니다.
2. 주요 구성 요소
OAuth 프로토콜은 다음의 주요 구성 요소로 이루어집니다:
| 구성 요소 | 설명 |
|---|---|
| 리소스 소유자 (Resource Owner) | 사용자 본인. 자신의 데이터에 대한 접근 권한을 부여할 수 있는 주체입니다. |
| 클라이언트 (Client) | 사용자의 권한을 요청하는 애플리케이션(예: 모바일 앱, 웹 서비스). |
| 인증 서버 (Authorization Server) | 사용자의 인증을 처리하고 액세스 토큰을 발급하는 서버입니다. |
| 리소스 서버 (Resource Server) | 사용자의 데이터를 보유하고 있으며, 액세스 토큰을 검증하여 접근을 허용하는 서버입니다. |
OAuth 2.0 주요 흐름
현재 가장 널리 사용되는 버전은 OAuth 2.0이며, RFC 6749에 정의되어 있습니다. OAuth 1.0은 복잡한 암호화 과정으로 인해 사용이 줄어들었고, 2.0은 HTTPS를 전제로 하여 구현을 단순화했습니다.
주요 인증 흐름(그랜트 타입)
OAuth 2.0은 다양한 시나리오에 맞춰 여러 권한 부여 방식(Grant Types)을 제공합니다.
1. Authorization Code Grant (가장 일반적)
웹 애플리케이션에서 사용되는 표준 방식입니다.
- 사용자가 클라이언트 앱에서 "구글 로그인" 클릭
- 구글 인증 서버로 리디렉션
- 사용자 인증 후 승인 페이지 표시
- 승인 시 인증 코드를 클라이언트로 반환
- 클라이언트가 인증 코드를 사용해 액세스 토큰 요청
- 인증 서버가 액세스 토큰(및 리프레시 토큰) 발급
✅ 장점: 보안성이 높음 (토큰이 직접 브라우저를 거치지 않음)
✅ 주로 서버 기반 애플리케이션에 적합
2. Implicit Grant
단일 페이지 애플리케이션(SPA)에서 사용되나, 보안상 취약하여 현재는 권장되지 않음.
- 인증 코드 없이 직접 액세스 토큰을 브라우저 URL 해시에 반환
- 토큰이 노출될 위험이 있음
⚠️ 주의: OAuth 2.1에서는 이 방식이 제거될 예정
3. Client Credentials Grant
서버 간 통신에 사용됩니다. 사용자 없이 클라이언트 자체가 인증받는 방식입니다.
- 예: 백엔드 서비스가 API를 호출할 때
- 클라이언트 ID와 비밀을 사용해 토큰 발급
4. Resource Owner Password Credentials Grant
사용자의 아이디와 비밀번호를 클라이언트가 직접 받고, 이를 인증 서버에 전달하는 방식.
- 신뢰할 수 있는 클라이언트(예: 공식 앱)에 한해 사용
- 보안 위험으로 인해 대부분의 서비스에서 비권장
보안 고려사항
OAuth는 강력한 보안 프레임워크이지만, 잘못 구현하면 다양한 공격에 노출될 수 있습니다.
주요 보안 위협
- CSRF (Cross-Site Request Forgery): 인증 요청 시
state파라미터를 사용해 방어 - 토큰 탈취: HTTPS 필수 사용, 토큰 저장 시 안전한 저장소 활용
- 리디렉션 URI 조작: 사전 등록된 리디렉션 URI만 허용
- 토큰 만료 관리: 짧은 유효기간의 액세스 토큰과 리프레시 토큰 조합 사용
OAuth와 OpenID Connect의 차이
- OAuth 2.0: 권한 부여 프로토콜 (사용자 데이터 접근 허용)
- OpenID Connect (OIDC): OAuth 2.0 위에 구축된 인증 레이어로, 사용자 인증을 목적으로 함
OIDC는 ID 토큰(JWT 형식)을 추가하여 "사용자가 누구인지"를 확인할 수 있게 해줍니다. 따라서 소셜 로그인 기능을 구현할 때는 보통 OAuth 2.0 + OpenID Connect 조합이 사용됩니다.
활용 사례
- 소셜 로그인 (Google, Facebook, Naver, Kakao 등)
- API 기반 서비스 연동 (예: 구글 캘린더에 이벤트 추가)
- 마이크로서비스 아키텍처 내 인증 토큰 전달
- IoT 기기의 사용자 권한 관리
참고 자료
- RFC 6749 - The OAuth 2.0 Authorization Framework
- OAuth.net 공식 사이트
- OpenID Connect 공식 사이트
- Google, Microsoft, Naver 등 주요 플랫폼의 OAuth 2.0 문서
관련 문서
OAuth는 현대 웹 및 모바일 애플리케이션의 핵심 인증 인프라로, 안전한 사용자 데이터 접근을 가능하게 하는 기반 기술입니다. 올바르게 구현된다면 사용자 경험과 보안을 동시에 강화할 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.