"모든 HTTP 인증 scheme — JWT, OAuth, API key, session cookie, AWS SigV4 — 가 두 shape 중 하나에 맞아: request 와 함께 누군지 증명하는 거 보내거나, server 가 마지막 response 에 설정한 거 보내거나. Basic 과 Bearer 가 protocol 이 ship 한 첫 두 패턴."
Authorization header — 한 header, 여러 scheme
HTTP 가 인증 자격 증명용 단일 header 정의: Authorization. 값이 항상 <scheme> <credentials>. Scheme 이 server 한테 자격 증명 해석 법 알려줘.
원래 두 scheme — RFC 7235 정의 — 가 Basic 과 Bearer. 현대 auth flow (OAuth2, JWT) 가 다 Bearer scheme 씀; token 의 format 과 lifecycle 다양, wire shape 은 동일.
HTTP Basic — 원조 scheme
Basic 이 username 과 password 직접 운반:
Authorization: Basic cGlwcGE6c2VjcmV0MTIz
자격 증명 부분이 base64("username:password") — 위 예에서 pippa:secret123. Wire 읽는 누구든 (network sniffer, 새는 log, TLS 없는 중간 proxy) base64-decode 해서 정확한 password 회복 가능. Base64 는 encoding 이지 암호화 아님.
이 이유로 TLS 없는 Basic 은 password 를 network 경로 누구한테나 broadcast. TLS 와 함께면 내부 tooling 과 빠른 prototype 엔 동작 가능 scheme — 근데 production API 가 거의 안 씀, user password 가 모든 request 에 끝나서 누설 면 증가.
HTTP Bearer — 자격 증명을 password 와 분리
Bearer 가 opaque token 운반:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1XzQyIn0.signature
Token 이 어떤 이전 process 가 발급 — login endpoint, OAuth authorization, API key generator. Server 가 token validate (DB lookup, JWT signature check, OAuth introspection) 하고 token 이 authorize 한 거 부여. User 원래 password 가 request 에 없음.
이득:
- 분리 가능. Token ≠ password. Compromised token revoke; user password 유지.
- Revocable. Server 가 token 즉시 blacklist 가능; password 재사용 안 한 거로 만들 수 없음.
- 단기 가능. Token 분 안에 expire 가능; password 못 함.
- Scope 제한 가능. Token 이 user full power 의 부분집합 부여 가능; password 가 모든 거 부여.
이게 모든 현대 API 가 Bearer 쓰는 이유. Token 의 내부 shape — opaque random string, JWT, encrypted blob — 이 다음 lesson; wire shape 은 그냥 Authorization: Bearer <뭐든>.
WWW-Authenticate — Server 의 auth 챌린지
Client 가 자격 증명 안 보내거나 (잘못된 거 보내거나) 하면 server 가 client 한테 어떤 scheme 쓸지 알려주는 WWW-Authenticate response header 와 함께 401 Unauthorized 돌려줘:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token"
Content-Type: application/json
{"error": {"code": "unauthenticated", "message": "..."}}
브라우저가 이 header 써서 native 로그인 dialog 표시 (Basic 용). 프로그램 client 가 이거 써서 어느 token type 보낼지 앎. 2026년 대부분 API 가 WWW-Authenticate 건너뜀 (docs 가 client 한테 뭐 보낼지 알려줌) — 근데 공식 발견 메커니즘.
Custom scheme — Basic 과 Bearer 안 충분할 때
일부 API 가 자기 scheme 이름 발명. AWS 가 Authorization: AWS4-HMAC-SHA256 ... 씀 — 자격 증명이 request byte 의 per-request HMAC 인 request-signing scheme. Cloudflare 가 별개 header 로 X-Auth-Key 씀 (RFC 위반, 근데 흔함). Stripe 가 API key 에 Bearer 씀.
새 scheme 발명 가치 거의 없음. 두 표준 패턴 + cookie 기반 session 패턴 이 사실상 모든 정당 사용 사례 커버, HTTP intermediary (proxy, logging tool, gateway) 가 표준 올바로 처리.
cwkPippa 의 auth 현실
Authorization: Bearer <admin-token> 체크 추가. 어디에도 Basic 없음. Frontend 가 token 을 HttpOnly cookie 에 저장하고 backend 가 FastAPI dependency injection 통해 읽어. 표준 shape, 최소 scheme 수.