Essential Security Practices for OAuth 2.0 Authorization Code Flow
PKCE와 state로 OAuth 보안 강화하기
Hun Jang Dec 4, 2025
OAuth 2.0 “인가 코드(Authorization Code)” 플로우를 쓸 때 꼭 챙겨야 할 보안 체크리스트를 한 장으로 정리
1) PKCE는 “무조건 켜기”
- 무엇: code_verifier / code_challenge로 인가 코드 가로채기 공격을 막는 확장.
- 왜: 모바일·SPA 같은 퍼블릭 클라이언트 보호용으로 시작했지만, 지금은 모든 클라이언트에 권장/사실상 표준입니다. (IETF Datatracker)
구현 팁
- code_challenge_method는 S256 사용.
- 서버는 발급 시 저장 안 해도 됨(클라이언트가 나중에 verifier 제시). (IETF Datatracker)
2) state로 CSRF 묶기
- 무엇: 요청 ↔ 콜백을 하나의 세션으로 바인딩하는 임의 문자열.
- 원칙: 강한 랜덤·1회용, 사용자 에이전트에 바인딩, 콜백에서 정확히 검증. 민감정보 넣지 않기. (IETF Datatracker)
체크
- 요청 보낼 때 생성 → 서버 리다이렉트에 그대로 돌아오는지 확인 → 불일치 시 즉시 거절. (Information Security Stack Exchange)
3) 다중 IdP면 **RFC 9207 iss*로 믹스업 방지
- 문제: 여러 인가서버(IdP)를 쓰면 A에게서 시작한 흐름이 B의 응답으로 섞이는(mix‑up) 공격 가능.
- 해법: 응답에
iss(issuer) 를 포함하고, 클라이언트가 예상한 발급자와 일치하는지 검증. (IETF Datatracker)
4) 최신 BCP 따라가세요
- 리다이렉트 URI 엄격 검증, Implicit 등 취약 모드 사용 금지, 브라우저·네이티브 앱 별 모범사례 준수. (OAuth 2.0 보안 BCP / OAuth 2.1 초안) (IETF Datatracker)