OAuth
📋 문서 버전
이 문서는 3개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
OAuth
개요
OAuth(Open Authorization)는 사용자의 자격 증명(예: 아이디와 비밀번호)을 공유하지 않고도 제3자 애플리케이션이 사용자의 리소스에 접근할 수 있도록 허용하는 오픈 스탠더드 인증 프로토콜입니다. 주로 웹 및 모바일 애플리케이션에서 사용자의 데이터에 안전하게 접근하기 위해 사용되며, 사용자가 특정 서비스(SNS, 클라우드 저장소 등)의 계정 정보를 직접 제공하지 않아도, 해당 서비스의 기능을 활용할 수 있게 해줍니다.
예를 들어, "Google로 로그인" 또는 "Facebook으로 계속하기"와 같은 기능은 OAuth를 기반으로 동작합니다. 이 방식은 사용자의 비밀번호 유출 위험을 줄이고, 접근 권한을 세밀하게 제어할 수 있어 현대 정보보안에서 핵심적인 역할을 합니다.
OAuth의 주요 개념
1. 등장 배경
전통적인 인증 방식에서는 제3자 애플리케이션이 사용자의 계정 정보(아이디/비밀번호)를 직접 받아야 했습니다. 이는 보안상 큰 위험을 초래하며, 사용자가 비밀번호를 여러 서비스에 재사용할 경우 한 곳에서 유출되면 다른 서비스까지 피해를 입을 수 있었습니다.
OAuth는 이러한 문제를 해결하기 위해 개발되었으며, "접근 토큰(access token)" 을 사용해 사용자의 리소스에 제한된 범위로 접근할 수 있도록 설계되었습니다.
2. 주요 구성 요소
OAuth 프로토콜에는 다음과 같은 주요 구성 요소가 있습니다:
| 구성 요소 | 설명 |
|---|---|
| 리소스 소유자 (Resource Owner) | 사용자 본인. 자신의 데이터(예: 프로필 정보, 사진 등)에 접근 권한을 부여하는 주체입니다. |
| 클라이언트 (Client) | 사용자의 데이터에 접근을 요청하는 애플리케이션(예: 모바일 앱, 웹 서비스). |
| 인증 서버 (Authorization Server) | 사용자의 인증을 처리하고 접근 토큰을 발급하는 서버입니다. |
| 리소스 서버 (Resource Server) | 사용자의 데이터를 저장하고 관리하는 서버로, 접근 토큰을 검증한 후 데이터를 제공합니다. |
OAuth 2.0 주요 흐름 (그랜트 유형)
OAuth 2.0은 다양한 시나리오에 맞춰 여러 권한 부여 방식(Grant Type)을 제공합니다. 가장 대표적인 방식은 다음과 같습니다.
1. 인가 코드 흐름 (Authorization Code Flow)
가장 일반적이고 보안성이 높은 방식으로, 웹 애플리케이션에 적합합니다.
sequenceDiagram
사용자 ->> 클라이언트: 로그인 요청
클라이언트 ->> 인증 서버: 인가 요청 (redirect_uri 포함)
인증 서버 ->> 사용자: 로그인 및 동의 페이지 제공
사용자 ->> 인증 서버: 인증 및 동의
인증 서버 ->> 클라이언트: 인가 코드 반환
클라이언트 ->> 인증 서버: 인가 코드 + 클라이언트 비밀 키로 토큰 요청
인증 서버 ->> 클라이언트: 접근 토큰(Access Token) 발급
클라이언트 ->> 리소스 서버: 접근 토큰으로 데이터 요청
리소스 서버 ->> 클라이언트: 요청한 데이터 제공
✅ 장점: 토큰이 직접 사용자 브라우저를 거치지 않아 보안성이 높음
🔐 보완: PKCE(Proof Key for Code Exchange)를 추가하면 모바일/SPA에서도 안전하게 사용 가능
2. 임시 자격 증명 흐름 (Client Credentials Flow)
서버 간 통신에 사용되며, 사용자 대신 애플리케이션 자체가 인증받는 방식입니다.
- 예: 백엔드 서비스가 다른 백엔드 API에 접근할 때
- 접근 토큰은 애플리케이션의 권한 범위로 발급됨
3. 리소스 소유자 암호 자격 증명 흐름 (Password Grant)
사용자가 직접 클라이언트에 아이디와 비밀번호를 입력하고, 클라이언트가 이를 인증 서버에 전달하여 토큰을 받는 방식입니다.
- ❌ 보안 취약 → 최신 가이드라인에서는 권장하지 않음
- 주로 렗지 시스템 또는 고도로 신뢰되는 내부 애플리케이션에 한정 사용
4. 암시적 흐름 (Implicit Flow)
SPA(Single Page Application)에서 사용되던 방식이지만, 보안상 문제로 OAuth 2.1에서 폐기됨.
- 접근 토큰이 URL 해시를 통해 전달되어 탈취 위험 존재
- 대신 PKCE 기반 인가 코드 흐름 사용 권장
OAuth 2.1과 보안 강화
최근 OAuth 2.1은 기존 OAuth 2.0의 보안 취약점을 보완하기 위해 정의되고 있으며, 다음과 같은 개선 사항을 포함합니다:
- PKCE를 모든 공개 클라이언트에 필수 적용
- 암시적 흐름 폐기
- ID 토큰과 OpenID Connect 통합 권장
- CSRF 및 리다이렉션 공격 방지를 위한 엄격한 검증
🔐 보안 팁: 항상 최신 보안 가이드라인을 따르고,
state파라미터를 사용해 CSRF 공격을 방지해야 합니다.
OAuth와 OpenID Connect의 차이
| 항목 | OAuth 2.0 | OpenID Connect (OIDC) |
|---|---|---|
| 목적 | 인가(Authorization) - 리소스 접근 권한 부여 | 인증(Authentication) - 사용자 신원 확인 |
| 사용 사례 | API 접근, 데이터 공유 | 로그인, SSO(Single Sign-On) |
| 토큰 | 접근 토큰(Access Token) | ID 토큰(JWT 포함), 접근 토큰 |
| 기반 | 자체 프로토콜 | OAuth 2.0 위에 구축된 레이어 |
OIDC는 OAuth 2.0을 기반으로 하며, 사용자 인증을 위한 표준을 제공합니다. 예를 들어, "Google로 로그인"은 내부적으로 OIDC를 사용합니다.
관련 기술 및 표준
- JWT(JSON Web Token): 접근 토큰 또는 ID 토큰으로 사용되며, 서명/암호화 가능
- PKCE(Proof Key for Code Exchange): 공개 클라이언트에서 인가 코드를 안전하게 교환하기 위한 메커니즘
- RFC 6749: OAuth 2.0 프레임워크 공식 사양
- RFC 7636: PKCE 표준 정의
참고 자료
- RFC 6749 - The OAuth 2.0 Authorization Framework
- OAuth.net 공식 사이트
- OpenID Connect 공식 사이트
- NIST SP 800-63B: Digital Identity Guidelines
결론
OAuth는 현대 웹 및 모바일 서비스에서 필수적인 인증 및 인가 프로토콜로 자리 잡았습니다. 사용자 경험을 개선하면서도 보안을 유지할 수 있는 균형을 제공하며, 특히 PKCE와 같은 보안 확장 기능과 결합하면 다양한 환경에서 안전하게 적용할 수 있습니다. 그러나 잘못 구현할 경우 보안 사고로 이어질 수 있으므로, 최신 표준과 모범 사례를 준수하는 것이 중요합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.