인증과 권한

인증/권한 책임 분리

로그인은 사용자가 누구인지 확인하는 단계이고, 세션이나 토큰은 그 확인 결과를 유지하는 방식이며, 권한 부여는 특정 행동을 해도 되는지 판단하는 단계입니다. 이 셋을 섞으면 보안 버그가 숨어듭니다.

01

신원 확인

비밀번호, OAuth, MFA 등으로 사용자가 주장한 신원이 맞는지 검증합니다.

authn
02

상태 유지

세션 id나 JWT로 이후 요청에서 같은 사용자를 식별하되 만료와 갱신 규칙을 둡니다.

session
03

행위 허가

로그인 여부와 별개로 이 사용자가 이 리소스에 이 동작을 할 수 있는지 서버에서 검사합니다.

authz
04

회수와 감사

로그아웃, 토큰 폐기, 비밀번호 변경, 권한 변경이 기존 접근에 어떻게 반영되는지 정합니다.

revocation
Authentication
사용자가 누구인지 확인 로그인 성공은 사용자 id를 신뢰할 수 있다는 뜻이지 모든 행동을 허용한다는 뜻은 아닙니다.
who
Authorization
특정 리소스에 대한 행동 허가 자기 글 수정, 관리자 삭제처럼 리소스 소유권과 역할을 함께 봅니다.
can
Cookie vs JWT
저장 위치와 폐기 전략이 다름 HttpOnly 쿠키는 XSS 노출을 줄이고, JWT는 stateless하지만 회수 설계가 더 중요합니다.
state

서버 검사 · 만료 정책 · 오류 메시지 점검

서버 검사 프론트에서 버튼을 숨겨도 API에서 권한을 다시 검사합니다.
만료 정책 access token과 refresh token의 수명, 재발급, 탈취 대응을 분리합니다.
오류 메시지 로그인 실패가 계정 존재 여부를 과하게 드러내지 않게 합니다.

검사 순서

1. 세션이나 토큰으로 사용자 식별
2. 리소스 조회
3. 사용자 role과 resource owner 비교
4. 허용된 action만 실행