JWKS와 Token Introspection: OAuth 2.0 토큰 검증 방법 비교
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인프라/DevOps/보안
대상자
OAuth 2.0 인증 시스템을 구현하거나 토큰 검증 방식을 선택해야 하는 백엔드 개발자 및 시스템 아키텍트
난이도: 중급 이상 (OAuth 2.0, JWT, 인증 프로토콜 기본 지식 필요)
핵심 요약
- JWKS는 JWT만 검증하며, 로컬에서 토큰 검증이 가능해 성능과 확장성에 유리하다.
- Token Introspection은 실시간 토큰 상태 검증(예: 취소 여부)을 지원하지만, 네트워크 호출이 필요해 성능 저하가 발생할 수 있다.
- Hybrid Approach는 JWT 검증(JWKS) + 실시간 취소 확인(Introspection)을 결합해 보안성과 성능을 균형 있게 유지할 수 있다.
섹션별 세부 요약
1. JWKS (JSON Web Key Set)
- 기능: JWT의 서명 검증 및
exp
,iss
,aud
등 클레임 검증 가능. - 장점: 캐싱된 JWKS 사용 시 네트워크 호출 없이 검증 가능, 분산 시스템에 적합.
- 예제:
/.well-known/jwks.json
엔드포인트에서 공개키를 획득. - 도구:
jsonwebtoken
(Node.js),PyJWT
(Python),jjwt
(Java) 등 사용.
2. Token Introspection (RFC 7662)
- 기능: 불투명 토큰(opaque token)과 JWT 모두 검증 가능.
- 장점: 실시간 취소 상태 확인 가능, 중심화 시스템에 적합.
- 예제:
```http
POST /introspect HTTP/1.1
Host: auth-server
Authorization: Bearer
Content-Type: application/x-www-form-urlencoded
token=
```
- 응답 예시:
```json
{"active": true, "scope": "read write", "exp": 1419356238}
```
3. 비교 요소
- 토큰 유형: JWKS는 JWT만, Token Introspection은 JWT + 불투명 토큰 지원.
- 성능: JWKS는 로컬 검증으로 빠르지만, Token Introspection은 네트워크 호출이 필요.
- 확장성: JWKS는 인증 서버 부하가 없음, Token Introspection은 서버 부하 증가.
- 보안: JWKS는 JWT 클레임 검증에 의존, Token Introspection은 클라이언트 자격 증명 보호 필요.
4. 사용 시나리오
- JWKS 선택 시:
- 인증 서버가 JWT를 발행하고 JWKS
엔드포인트 제공 (예: Auth0, Okta).
- 고성능/고확장성이 필요한 분산 시스템.
- 단기 유효 토큰(5~60분) 사용으로 취소 위험 최소화.
- Token Introspection 선택 시:
- 불투명 토큰 발행 시 또는 실시간 취소 확인 필요 (예: 금융 시스템).
- 중심화 시스템 및 인증 서버와의 밀접한 연동이 필요한 경우.
5. 하이브리드 방식
- JWKS + Introspection 병행:
- JWT 검증은 JWKS로 처리, 취소 확인은 Introspection으로 수행.
- 키 회전(key rotation) 시 JWKS 업데이트, 긴 유효 기간 토큰 관리 시 Introspection 활용.
6. 구현 팁
- JWKS: JWKS 엔드포인트를 HTTPS로 보호하고,
kid
값으로 키 회전 감지. - Introspection: TLS로 통신, 클라이언트 자격 증명 보호 필수.
- 토큰 유효 기간:
- JWKS: 짧은 유효 기간(단기 토큰) 사용.
- Introspection: 긴 유효 기간 토큰 사용 시 실시간 검증 필수.
결론
- JWKS는 JWT 기반 분산 시스템에 적합, Token Introspection은 불투명 토큰 또는 실시간 취소 검증이 필요한 경우 사용.
- 하이브리드 방식이 보안성과 성능을 균형 있게 유지하는 최적의 선택.
- OAuth 제공자(Auth0, Google, Keycloak 등)의 지원 방법을 확인한 후, 시스템 요구사항(토큰 유형, 성능, 인프라 구조)에 따라 선택.