[문제] OAuth 2.0의 권한 부여 코드 흐름(Authorization Code Flow)을 단계별로 설명하고, PKCE(Proof Key for Code Exchange)가 필요한 이유와 동작 방식을 서술하시오.
1. OAuth 2.0 Authorization Code Flow
| 단계 | 설명 |
|---|---|
| ① 권한 요청 | 클라이언트가 사용자를 Authorization Server로 리다이렉트 (scope, redirect_uri, state 포함) |
| ② 사용자 동의 | 사용자가 로그인·권한 동의 → Authorization Code 발급 |
| ③ 코드 교환 | 클라이언트가 Authorization Code + Client Secret으로 Token Endpoint에 Access Token 요청 |
| ④ 토큰 사용 | Access Token으로 Resource Server API 호출 |
| ⑤ 갱신 | Refresh Token으로 Access Token 재발급 (만료 시) |
2. PKCE (Proof Key for Code Exchange)
필요성: 모바일·SPA 앱은 Client Secret을 안전하게 저장할 수 없어 Authorization Code 가로채기 공격에 취약하다. PKCE는 이를 방지한다.
동작 방식:
- Code Verifier: 클라이언트가 랜덤 문자열 생성 (43~128자)
- Code Challenge: Code Verifier의 SHA-256 해시값 → Base64URL 인코딩
- 권한 요청 시 Code Challenge 전송, 토큰 요청 시 Code Verifier 전송
- Authorization Server가 Code Challenge == SHA-256(Code Verifier) 검증
효과: Authorization Code를 가로채도 Code Verifier 없이는 Access Token 획득 불가
핵심 키워드: OAuth 2.0, Authorization Code, PKCE, Code Verifier, Code Challenge, Refresh Token, SPA, 모바일 보안
OAuth 2.0 Authorization Code Flow는 서버 측 Secret 보호를 전제로 하며, PKCE는 Public Client(SPA·모바일)에서 코드 가로채기 공격을 방지하는 필수 보안 확장이다. RFC 7636으로 표준화되었다.