보안 · 심화
OIDC(OpenID Connect)에서 ID Token과 OAuth2의 Access Token은 목적과 검증 방식이 다릅니다. 두 토큰의 역할 차이를 설명하고, 클라이언트가 Access Token을 ID Token처럼 사용하거나 그 반대로 사용할 때 발생할 수 있는 보안 문제를 설명해주세요.
힌트 · ID Token은 '누가 로그인했는가'(인증), Access Token은 '무엇에 접근 가능한가'(인가)라는 대상(audience)과 신뢰 주체 차이 관점에서 접근하세요.
인증인가JWT클레임검증
모범답안
OIDC의 ID Token과 OAuth2의 Access Token은 목적과 검증 방식이 다릅니다.
ID Token은 사용자 인증 정보를 담고 있으며, '누가 로그인했는지'를 나타냅니다. 이는 JWT 형식으로 발급되며, 클라이언트가 ID Token을 검증하면 사용자의 신원을 확인할 수 있습니다.
반면 Access Token은 '무엇에 접근 가능한지'를 나타내는 인가(Authorization) 토큰입니다. 리소스 서버에 대한 접근 권한을 부여하며, ID Token처럼 사용자 신원을 직접적으로 나타내지는 않습니다.
만약 클라이언트가 Access Token을 ID Token처럼 사용하면, 사용자의 신원을 잘못 판단하거나 권한 없는 접근을 허용할 수 있습니다. 반대로 ID Token을 Access Token처럼 사용하면, 사용자에게 부여되지 않은 리소스 접근 권한을 부여하게 되어 심각한 보안 문제가 발생할 수 있습니다. 각 토큰의 목적에 맞게 사용하고 검증하는 것이 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 웹 보안 면접 질문
- 보안 취약점 공개 정책(Responsible Disclosure)이란 무엇이며, 왜 중요한가요?
- Access Token을 JWT로 발급할 때, 토큰을 stateless하게 검증하면 즉시 폐기(로그아웃, 탈취 대응)가 어렵습니다. JWT의 stateless 검증 이점을 최대한 유지하면서 토큰 무효화(revocation)를 구현하려면 어떤 설계 전략들을 고려할 수 있나요?
- OAuth2 Authorization Code Grant에서 PKCE(Proof Key for Code Exchange)가 도입된 배경과, code_verifier/code_challenge가 인가 코드 탈취(authorization code interception) 공격을 어떻게 막는지 설명해주세요. SPA나 모바일 같은 public client에서 특히 중요한 이유는 무엇인가요?
- JWT 서명 검증 시 발생할 수 있는 alg 헤더 관련 취약점들(alg:none 허용, RS256으로 발급한 토큰을 HS256으로 검증하면서 공개키를 비밀키로 악용하는 key confusion 공격)을 설명하고, 검증 로직을 어떻게 안전하게 구현해야 하는지 설명해주세요.