질문 163 · 실전 면접 답변
인증(Authentication)과 인가(Authorization)는 무엇이 다르고 어디에서 검증하나요?
이렇게 답해 보세요 (핵심 답변)
인증(Authentication)은 요청을 보낸 사용자가 '누구인지(신원)'를 확인하는 과정(예: 로그인, 세션/토큰 검증, 401 Unauthorized)이고, 인가(Authorization)는 그렇게 신원이 확인된 사용자가 '특정 자원이나 기능에 접근할 권한이 있는지'를 판단하는 과정(예: 본인 게시글 수정 여부, 관리자 권한 확인, 403 Forbidden)입니다. 프론트엔드에서 권한 없는 메뉴 버튼을 숨기거나 비로그인 사용자를 로그인 페이지로 리다이렉트하는 것은 사용자 경험(UX)을 위한 보조 처리일 뿐입니다. 공격자는 브라우저 UI를 거치지 않고 API를 직접 호출하거나 URL의 ID 파라미터를 바꿀 수 있으므로, 모든 인증과 자원별 인가 검증은 반드시 서버(백엔드)에서 최종 수행해야 합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 로그인에 성공해 유효한 토큰을 가진 사용자라도 다른 사람의 주문 내역(IDOR 취약점)이나 관리자 API를 호출할 수 있어서는 안 됩니다.
- 401(인증 필요)과 403(권한 없음) 상태 코드를 명확히 구분해 계약하면 프론트엔드에서도 로그인 재유도 화면과 권한 안내 화면을 정확히 분기할 수 있습니다.
면접에서 자주 하는 실수
프론트엔드에서 관리자 버튼을 숨겼거나 클라이언트 상태의 role 값만 확인했다는 이유로 서버 API의 권한 검사를 생략해서는 절대 안 됩니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 163번을 바탕으로 질문과 답변을 새로 정리했습니다.