인가(Authorization)
- 인가?
- 인증(Authentication)과 인가(Authorization)의 차이
- 인가가 필요한 이유, 그 역할
- 인증 이후 인가가 어떤 프로세스로 이어지는가?
- 보안 시스템에서의 인증과 인가
인가(Authorization)
인증된 사용자가 어떤 자원에 접근할 수 있는지 결정하는 과정
- 인증 : 사용자가 누구인지 확인하는 절차
- 인가 : 인증된 사용자가 무엇을 할 수 있는지 결정하는 절차
인증은 건물 입구에서 신분증을 보여주고 본인 확인을 하는 과정
인가는 건물 안에서 특정 방에 들어갈 수 있는 권한이 있는지 확인하는 과정
1. 인증과 인가의 차이점
| 인증(Authentication) | 인가(Authorization) | |
| 목적 | 사용자가 누구인지 확인 | 사용자가 무엇을 할 수 있는지 결정 |
| 예시 | 로그인 시 아이디, 비밀번호 검증 | 관리자만 게시글 삭제 가능 |
| 시점 | 항상 먼저 수행 | 인증 후에 수행 |
| 결과 | 사용자의 신원 확인 | 권한에 따른 접근 제어 |
2. 인가의 필요성과 역할
- 보안 강화 : 인증만으로는 충분하지 않으며, 각 사용자마다 허용된 범위를 제한해야함
- 자원 보호 : 중요한 데이터나 관리자 기능은 권한이 있는 사용자만 접근할 수 있어야함
- 사용자 경험 : 불필요한 접근을 막아 사용자가 본인 권한 범위 내에서만 기능을 이용하도록 도와야함
예 - 시
- 영화관 : 티켓을 구매했더라도(인증 완료), 1관 티켓이면 1관에만 입장할 수 있음(인가)
- 사무실 : 사원증으로 출입(인증)하지만 부서별 권한(인가)에 따라 특정 층이나 회의실만 출입 가능
3. 왜 분리해야하는가?
1) 보안의 경계를 명확하게
- 인증은 신원확인, 인가는 행위 허용 여부이기 때문에 섞이게 되면 신원 미확정 상태에서 권한을 부여하는 오류가 생길 수 있음
2) 책임 분리(SRP)
- 인증 모듈은 크리덴셜 검증에 집중, 인가 모듈은 정책(규칙) 판단에 집중함
- > 코드 단순화, 테스트 용이, 교체 용이
3) 정책 진화, 확장 용이
- 비즈니스가 커질수록 권한 규칙은 잦은 변경이 필요함. 인증과 분리하면 정책만 바꿔도 됨
4) 감사, 추적(Audit) 품질 향상
- 누가(인증) 무엇을 시도했고(행위), 왜 허용/거부되었는지(정책)를 분리 로깅하면 사고 분석이 쉬워짐
5) 취약점 예방
- 섞이면 IDOR(수평 권한 상승), 권한 누락 체크 같은 문제가 자주 발생함
4. 인증 후 인가 프로세스의 이해
사용자가 로그인한 이후 실제 자원 접근까지 이어지는 과정
* PEP(Policy Enforcement Point) : 검사 적용 지점
* PDP(Policy Decision Point) : 정책 판단 지점
규모가 작으면 둘을 한 프로세스에서 구현할 수 있음
클라이언트가 API서버에 인증 헤더 요청 - > API서버의 인증 확인 - > 만약 인증이 실패하면 401 반환
인증이 성공하면 API서버가 PDP에게 인증 헤더에 대한 권한을 요구함 - > PDP가 데이터저장소에서 정책/속성을 조회함
- > 데이터저장소가 PDP에게 정책/속성을 반환해줌 - > PDP가 API서버에게 권한 허용/거부 결정을 내려줌
- > 이에 대해 API서버가 클라이언트에게 허용/거부(200 or 403 등등..)로 응답해줌
5. 인가는 왜 항상 인증 이후여야 하는가?
1) 신원 미확정 상태에서는 권한 판단이 불가함
권한은 주체(사용자/시스템)에 귀속됨. 주체가 확정되기 전에는 정책을 적용할 대상이 없음!
2) 토큰/세션 위조 방지
먼저 신원(토큰/세션) 유효성을 검증해야 이후 권한 검사 의미가 생김
3) 오류시 안전한 기본값(Fail close) ??
인증 실패는 즉시 401로 닫아야함, 인증 성공 이후에 인가 과정에서 예외를 세분화(403)함
401 vs 403
| 상태코드 | 언제 사용함? | 의미 |
| 401 Unauthorized | 인증 실패/누락 | 누군지 확인되지않음 - > 먼저 로그인/자격 제시 필요 |
| 403 Forbiden | 인가 실패 | 누군진 알지만 해당 작업 권한 없음 |
* 인증과 인가를 구분해서 설계해야함. 로그인 성공이 곧 모든 권한 허용을 의미하진 않음
* 인가는 보통 역할(Role)이나 권한(Permission) 체계를 통해 관리됨
* 보안 사고 예방을 위해 최소 권한 원칙(Principle of Least Privilege)을 적용하는게 좋음
'Spring Boot' 카테고리의 다른 글
| 인가/권한 관리 : 인가 구현 예시 (0) | 2025.10.12 |
|---|---|
| 인가/권한 관리 : 권한 기반 접근 제어 (0) | 2025.10.05 |
| 헤더/토큰 기반 인증 : Refresh Token (0) | 2025.10.04 |
| 헤더/토큰 기반 인증 : JWT(JSON Web Token) (0) | 2025.10.04 |
| 헤더/토큰 기반 인증 : 토큰 기반 인증 (0) | 2025.10.04 |