패스잇
보안 · 중급

OAuth 2.0에서 PKCE(Proof Key for Code Exchange) 확장이 도입된 배경과 이 확장 기능이 Public Client(예: 모바일 앱, SPA) 환경에서 어떤 보안 문제를 해결하는지 설명해 주세요.

힌트 · Authorization Code 가로채기 공격을 방지하기 위해 Code Verifier와 Code Challenge를 사용하여 클라이언트의 신원을 확인합니다.

공개 클라이언트인가 코드 가로채기코드 교환자 (Code Verifier)코드 챌린지 (Code Challenge)기밀 클라이언트 가장 공격 방지

모범답안

OAuth 2.0에서 PKCE는 주로 Public Client 환경, 예를 들어 모바일 앱이나 SPA(Single Page Application)에서 발생하는 보안 취약점을 해결하기 위해 도입되었습니다.

가장 큰 문제는 "Authorization Code 가로채기" 공격입니다. Public Client는 Secret Key를 안전하게 보관할 수 없기 때문에, 공격자가 인가 코드를 가로채서 자신의 애플리케이션으로 토큰을 요청할 수 있습니다.

PKCE는 이를 방지하기 위해 "Code Verifier"와 "Code Challenge"라는 개념을 사용합니다. 클라이언트는 먼저 임의의 문자열인 Code Verifier를 생성하고, 이를 해싱하여 Code Challenge를 만듭니다. 인가 요청 시 Code Challenge를 서버에 보내고, 토큰 요청 시 Code Verifier를 함께 보냅니다. 서버는 Code Challenge와 Code Verifier를 비교하여 요청이 최초 인가 요청을 보낸 클라이언트로부터 온 것인지 확인합니다.

이러한 방식으로 PKCE는 공격자가 인가 코드를 가로채더라도 토큰을 획득하는 것을 막아, Public Client 환경에서 OAuth 2.0의 보안성을 강화합니다. 또한, 기밀 클라이언트를 가장하여 토큰을 탈취하는 공격도 방지할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 인증 / 인가 (JWT · OAuth) 면접 질문

← 인증 / 인가 (JWT · OAuth) 면접 질문 전체 보기