본문 바로가기

Spring Boot

인가와 권한 관리 : 인가(Authorization)

인가(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)을 적용하는게 좋음