JWT와 OAuth란?
JWT(Json Web Token)란?
JWT는 JSON 기반의 인증 및 정보 교환을 위한 토큰(Token) 방식입니다.
- 보안이 필요한 정보(사용자 인증 정보 등)를 Base64 URL-safe 형식의 토큰으로 변환하여 전송합니다.
- 토큰 자체에 정보가 포함되므로 서버가 별도로 인증 상태를 저장할 필요가 없습니다.
- 무상태(Stateless) 인증 방식이기 때문에 세션/쿠키 기반 인증보다 확장성이 뛰어납니다.
JWT 구조 (Header + Payload + Signature)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . // 헤더
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ . // 페이로드
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c // 서명
- 헤더(Header): 토큰의 타입과 해싱 알고리즘 정보를 포함
- 페이로드(Payload): 사용자 정보(클레임, Claims)를 포함 (ex:
id, email, role)
- 서명(Signature): 토큰의 무결성을 보장하기 위해 서명(Signature) 추가
JWT 인증 흐름
1. 사용자가 로그인하면, 서버에서 JWT를 생성하여 클라이언트에 전달
2. 클라이언트는 JWT를 저장 (localStorage 또는 sessionStorage)
3. 이후 요청마다 JWT를 HTTP 헤더(Authorization: Bearer 토큰)에 포함하여 서버에 전달
4. 서버는 JWT를 검증하여 사용자를 인증
OAuth(Open Authorization)란?
OAuth는 타사(Third Party) 애플리케이션이 사용자 리소스에 안전하게 접근할 수 있도록 인증을 위임하는 방식입니다.
- 일반적으로 소셜 로그인(Google, Facebook, GitHub 로그인 등)에서 많이 사용됩니다.
- OAuth 2.0은 Access Token과 Refresh Token을 활용하여 사용자 인증 및 권한 부여를 수행합니다.
OAuth 2.0 인증 흐름
1. 사용자가 Google, Facebook 등 외부 서비스에 로그인 요청
2. 인증 서버가 사용자에게 로그인 화면을 제공
3. 사용자가 로그인하면, 인증 서버는 Access Token을 발급
4. 클라이언트는 이 Access Token을 사용하여 보호된 API에 접근
JWT와 OAuth의 차이점
| 비교 항목 | JWT (Json Web Token) | OAuth (Open Authorization) |
|---|
| 사용 목적 | 인증(Authentication) | 인증(Authentication) + 권한 부여(Authorization) |
| 방식 | 서버가 발급한 토큰을 클라이언트가 보관 및 전송 | 타사 서비스(Google, Facebook 등)를 통한 인증 위임 |
| 토큰 저장 | 클라이언트(localStorage, sessionStorage) | 클라이언트와 인증 서버(Access Token & Refresh Token) |
| 보안성 | 토큰 탈취 시 문제 발생 가능 (별도 보안 조치 필요) | Refresh Token을 활용하여 더 안전한 접근 가능 |
| 사용 사례 | REST API 인증, 무상태 인증 | 소셜 로그인, 권한 위임 (Third Party API 접근) |
| 주요 프로토콜 | JWT 표준(JSON 기반) | OAuth 2.0 (Access Token & Refresh Token) |
JWT와 OAuth의 장단점
JWT의 장점
- 무상태(Stateless) 인증 → 서버에서 세션을 관리할 필요 없음
- 빠른 인증 처리 → 토큰만 검증하면 인증 가능
- 간단한 구조 → JSON 기반으로 쉽게 이해 및 사용 가능
JWT의 단점
- 토큰 탈취 시 보안 문제 발생 가능 (탈취되면 무제한 사용 가능)
- 토큰 길이가 길어 네트워크 부하 발생 가능
- 토큰 만료 후 재발급이 어려움 (OAuth의 Refresh Token처럼 재발급 지원 없음)
OAuth의 장점
- 권한 위임 기능 제공 → 사용자가 직접 ID/PW를 입력하지 않고도 인증 가능
- Refresh Token을 통해 보안 강화 → 토큰 탈취 시 피해를 줄일 수 있음
- 다양한 서비스에서 활용 가능 → Google, Facebook, GitHub 등과 연동 가능
OAuth의 단점
- 설정이 복잡함 → 클라이언트, 인증 서버, 리소스 서버 간의 복잡한 설정 필요
- 소셜 로그인 제공 업체에 의존 → 외부 인증 서버가 문제를 일으키면 서비스 이용 불가
JWT vs OAuth, 언제 사용할까?
JWT가 적합한 경우
- REST API에서 간단한 사용자 인증이 필요한 경우
- 세션을 유지할 필요가 없는 서버(Stateless API)
- 빠른 인증 처리가 필요한 경우
OAuth가 적합한 경우
- 소셜 로그인 (Google, Facebook 등)를 적용해야 하는 경우
- 서버 간 API 인증(Third Party API 연동)이 필요한 경우
- 보안이 중요한 애플리케이션 (토큰 재발급이 필요한 경우)
결론
- JWT는 인증(Authentication) 용도로 사용되며, 토큰 기반의 무상태 인증을 제공합니다.
- OAuth는 인증(Authentication) + 권한 부여(Authorization) 기능을 함께 제공하여, 제3자 서비스에 대한 접근을 허용합니다.
- JWT는 REST API 인증, OAuth는 소셜 로그인 및 권한 위임을 처리하는 데 적합합니다.
JWT와 OAuth는 서로 대체하는 개념이 아니라, 목적에 따라 함께 사용될 수도 있습니다!