Spring Framework
[Spring Security] Method 방식 인가 주요 아키텍처 이해와 어노테이션
터프남
2023. 4. 18. 23:04
728x90
반응형
Method 방식 - 개요
서비스 계층의 인가처리 방식
- 화면 메뉴 단위가 아닌 기능 단위로 인가처리
- 메소드 처리 전,후로 보안 검사 수행하여 인가처리
AOP 기반으로 동작
URL 방식은 Filter 기반이다. 사용자 요청을 Filter가 가로채서 자원에 대한 인가처리를 한다. AOP 기반과 Filter 기반은 내부동작의 차이가 있다.
- 프록시와 어드바이스로 메소드 인가처리 수행
보안 설정 방식
- 어노테이션 권한 설정 방식
- @PreAuthorize("hasRole("USER")"), @PostAuthorize("hasRole("USER")"), @Secured("ROLE_USER")
- 맵 기반 권한 설정 방식
- 맵 기반 방식으로 외부와 연동하여 메소드 보안 설정 구현
Method 방식 - 어노테이션 권한 설정
보안이 필요한 메소드에 설정
@PreAuthorize, @PostAuthorize
- SpEL 지원
- @PreAuthorize("hasRole('ROLE_USER') and (#account.username == principal.username)")
- PrePostAnnotationSecurityMetadataSource가 담당
@Secured, @RolesAllowed
- SpEL 미지원
- @Secured("ROLE_USER"), @RolesAllowed("ROLE_USER")
- SecuredAnnotationSecurityMetadataSource, Jsr250MethodSecurityMetadataSource가 담당
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
- 메소드 보안시 설정해야하는 어노테이션이다
코드
@GetMapping("/preAuthorize")
@PreAuthorize("hasRole('ROLE_USER') and #account.username == principal.username")
public String preAuthorize(AccountDto account, Model model, Principal principal){
model.addAttribute("method", "Success @PreAuthorize");
return "aop/method";
}
preAuthorize에 접근할 때 사용자는 ROLE_USER 라는 권한을 가져야하고 account로 전달되는 username과 인증을 받았을 때 인증된 사용자 정보를 principal로 참조할 수 있는데 그때 인증받은 사용자의 username과 같아야만 이 메소드에 접근할 수 있다.
Method 방식 주요 아키텍처
인가 처리를 위한 초기화 과정과 진행
초기화 과정
- 초기화 시 전체 빈을 검사하면서 보안이 설정된 메소드가 있는지 탐색
- 빈의 프록시 객체를 생성
- 보안 메소드에 인가처리(권한심사) 기능을 하는 Advice를 등록
- 빈 참조시 실제 빈이 아닌 프록시 빈 객체를 참조
진행과정
- 메소드 호출 시 프록시 객체를 통해 메소드를 호출
- Advice가 등록되어 있다면 Advice를 작동하게 하여 인가 처리
- 권한 심사 통과하면 실제 빈의 메소드를 호출한다.
참고
스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의
초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과
www.inflearn.com
728x90
반응형