OAuth
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
OAuth
개요
OAuth(Open Authorization)는 사용자의 인증 정보(예: 아이디와 비밀번호)를 공유하지 않고도 제3자 애플리케이션이 사용자 대신 리소스 서버에 접근할 수 있도록 허용하는 오픈 스탠다드 기반의 인증 프로토콜입니다. 주로 웹 및 모바일 애플리케이션에서 사용자의 데이터에 안전하게 접근하기 위해 사용되며, 사용자가 소셜 로그인(예: "구글로 로그인", "페이스북으로 로그인")을 할 때 뒷단에서 동작하는 핵심 기술입니다.
OAuth는 단순한 인증(Authentication)이 아닌 위임된 권한 부여(Authorization) 를 목적으로 하며, 사용자가 자신의 계정 정보를 제3자에게 노출하지 않으면서도 특정 서비스를 이용할 수 있도록 해줍니다.
주요 개념
1. 등장 배경
전통적인 인증 방식에서는 사용자가 제3자 애플리케이션에 자신의 아이디와 비밀번호를 직접 제공해야 했습니다. 이는 보안상 큰 위험을 초래하며, 비밀번호 유출 시 여러 서비스가 동시에 피해를 입을 수 있습니다. OAuth는 이러한 문제를 해결하기 위해 개발되었으며, "비밀번호를 공유하지 않고도 접근 권한을 위임" 할 수 있는 구조를 제공합니다.
2. 주요 구성 요소
OAuth 프로토콜은 다음의 주요 구성 요소로 이루어집니다:
| 구성 요소 | 설명 |
|---|---|
| 리소스 소유자 (Resource Owner) | 사용자 본인. 자신의 데이터에 대한 접근 권한을 부여할 수 있는 주체입니다. |
| 클라이언트 (Client) | 사용자의 권한을 요청하는 제3자 애플리케이션입니다. 예: 모바일 앱, 웹 서비스. |
| 인증 서버 (Authorization Server) | 사용자의 인증을 처리하고 액세스 토큰을 발급하는 서버입니다. |
| 리소스 서버 (Resource Server) | 사용자의 데이터를 보유하고 있으며, 액세스 토큰을 검증하여 접근을 허용하는 서버입니다. |
OAuth 2.0 주요 흐름
현재 널리 사용되는 표준은 OAuth 2.0이며, RFC 6749에 정의되어 있습니다. OAuth 2.0은 다양한 클라이언트 유형과 시나리오를 지원하기 위해 여러 권한 부여 방식(Grant Types) 을 제공합니다.
1. 인가 코드 흐름 (Authorization Code Flow)
가장 일반적이고 보안성이 높은 방식으로, 웹 애플리케이션에 적합합니다.
sequenceDiagram
participant User
participant Client
participant AuthServer
participant ResourceServer
User->>Client: 로그인 요청
Client->>AuthServer: 인가 요청 (redirect)
AuthServer->>User: 로그인 및 동의 요청
User->>AuthServer: 인증 및 동의
AuthServer->>Client: 인가 코드 반환
Client->>AuthServer: 인가 코드 + 클라이언트 비밀로 토큰 요청
AuthServer->>Client: 액세스 토큰 발급
Client->>ResourceServer: 액세스 토큰으로 데이터 요청
ResourceServer->>Client: 데이터 제공
2. 기타 주요 Grant Types
| 방식 | 사용 사례 |
|---|---|
| 임시 자격 증명 흐름 (Client Credentials) | 서버 간 통신 (예: 백엔드 서비스 간 API 호출) |
| 암시적 흐름 (Implicit Flow) | 브라우저 기반 SPA (현재는 권장되지 않음) |
| 리소스 소유자 비밀번호 자격 증명 (Password Grant) | 신뢰할 수 있는 클라이언트에 한해 사용 (보안 취약) |
| 리프레시 토큰 (Refresh Token) | 만료된 액세스 토큰을 갱신하기 위한 보조 토큰 |
보안 고려사항
OAuth는 보안을 강화하기 위해 설계되었지만, 잘못 구현하면 다양한 공격에 노출될 수 있습니다.
주요 보안 위협
- CSRF (Cross-Site Request Forgery): 인가 요청 시
state파라미터를 사용해 방어. - 토큰 유출: HTTPS 필수 사용, 토큰 저장 시 안전한 저장소 활용.
- 리다이렉트 URI 조작: 사전 등록된 리다이렉트 URI만 허용.
- PKCE (Proof Key for Code Exchange): 공개 클라이언트(예: 모바일 앱)에서 인가 코드를 보호하기 위한 확장 기능.
OAuth와 OpenID Connect의 차이
- OAuth 2.0: 권한 부여 프로토콜로, "무엇에 접근할 수 있는가"를 다룹니다.
- OpenID Connect (OIDC): OAuth 2.0 위에 구축된 인증 레이어로, "누가 로그인했는가"를 확인합니다. ID 토큰(JWT 형식)을 통해 사용자 인증 정보를 제공합니다.
즉, OAuth는 인증이 아닌 권한 위임을 위한 것이며, 인증이 필요할 경우 OIDC와 함께 사용됩니다.
활용 사례
- 소셜 로그인 (Google, Facebook, GitHub 등)
- API 기반 서비스 간 데이터 공유 (예: 구글 캘린더에 접근하는 일정 관리 앱)
- 기업 내 SSO(Single Sign-On) 시스템 구축
- IoT 기기의 사용자 권한 관리
참고 자료
- RFC 6749 - The OAuth 2.0 Authorization Framework
- OAuth.net 공식 사이트
- OpenID Connect 공식 사이트
- Google OAuth 2.0 문서
관련 문서
- JWT (JSON Web Token)
- [SSO (Single Sign-On)]
- [PKCE (Proof Key for Code Exchange)]
- [SAML (Security Assertion Markup Language)]
OAuth는 현대 웹 및 모바일 애플리케이션의 핵심 보안 인프라로 자리 잡았으며, 안전한 권한 위임을 위한 표준적인 솔루션으로 지속적으로 발전하고 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.