-
[Spring Security] 인증(Authentication)과 권한 부여(Authorization)Back-End/Spring Boot 2023. 5. 19. 11:28
스프링 시큐리티의 기본 동작 방식은 서블릿의 여러 종류의 필터와 인터셉터를 이용해 처리된다. 필터는 서블릿에서 말하는 단순한 필터를 의미하고, 인터셉터는 스프링에서 필터와 유사한 역할을 한다.
필터와 인터셉터는 특정한 서블릿이나 컨트롤러의 접근에 관여한다는 점에서 유사하지만 결정적인 차이를 구분하자면, 필터는 스프링과 무관하게 서블릿 자원이고, 인터셉터는 스프링의 빈으로 관리되면서 스프링 컨테스트 내에 속한다는 차이이다.
인터셉터의 경우는 스프링의 내우베엇 컨트롤러를 호출할 때 관여하기 때문에 스프링 컨텍스트 내에 있는 모든 자원을 활용할 수 있다. 스프링 시큐리티를 이용하면 위와 같이 인터셉터와 필터를 사용하면서 별도의 컨텍스트를 생성해서 처리한다. 스프링 시큐리티는 현재 동작하는 스프링 컨텍스트 내에서 동작하기 때문에 이미 컨텍스트에 포함된 여러 빈들을 같이 이용해서 다양한 방식의 인증 처리가 가능하도록 설계할 수 있다.
📑 인증(Authentication) vs 권한(Authorization - 인가)
인증은 쉽게 말해 자신을 증명해내는 것이다. 다시 말해 자기 스스로가 무언가 자신을 증명할 만한 자료를 제시하는 것이다. 반면 권한 부연는 남에 의해서 자격이 부여된다는 점에 차이가 있다.
엔지니어 A는 B회사에 고장 난 데이터베이스를 고치기 위해 방문한다. 예약을 한 상태에서 방문한 A씨는 우선 회사 입구에서 '본인을 인증'할 것을 요구받는다. 출입증을 검사하는 직원은 A의 신분을 확인한다. 인증이란 이처럼 본인이 뭇엇인가를 증명하는 행위라고 보면 된다.
회사 내부에 들어간 A씨는 담당자를 만나서 DB 접근 권한 등의 정보를 얻어야 한다. 이 과정을 인가 혹은 권한 부여라고 볼 수 있다. 권한 부여 과정에서 A씨에는 데이터베이스를 조회하거나 수정할 수 있는 권한이 부여된다.
스프링 시큐리티의 내부에도 이와 같은 구조를 가지고 있다. 스프링 시큐리티에서 가장 중요한 역할을 하는 존재가 인증을 담당하는 AuthenticationManager(인증 매니저)라는 존재이다. AuthenticationManager는 다양한 방식의 인증을 처리할 수 있도록 아래와 같은 구조로 설계되어 있다.
ProviderManager는 인증에 대한 처리를 AuthenticationProvider라는 타입의 객체를 이용해 처리를 위임한다. AuthenticationProvider(인증 제공자)는 실제 인증 작업을 진행한다. 이때 인증된 정보에는 권한에 대한 정보를 같이 전달하게 되는데 이 처리는 UserDetailService라는 존재와 관련있다. UserDetailService 인터페이스의 구현체의 실제로 사용자의 정보와 사용자가 가진 권한의 정보를 처리해서 반환하게 된다.
개발자가 스프링 시큐리티를 커스터마이징하는 방식은 크게 AuthenticationProvider를 직접 구현하는 방식과 실제 처리를 담당하는 UserDetailService 를 구현하는 방식으로 나눠진다. 대부분의 경우 UserDetailService를 구현하는 형태를 사용하는 것으로 충분하지만, 새로운 프로토콜이나 인증 구현 방식을 직접 구현하는 경우에는 AuthenticationProvider 인터페이스를 구현해 사용하기도 한다.
출처 : 코드로 배우는 스프링 프로젝트
반응형'Back-End > Spring Boot' 카테고리의 다른 글
[Spring Boot] JAR -> WAR로 변경하기 (0) 2023.06.12 [Spring Boot] JAR/WAR 배포 방법 비교하기 (0) 2023.06.12 [Spring Boot] bootstrap css 파일 경로 인식 못 함 (0) 2023.03.30 [Spring Boot] 서버 재시작 없이 html 변경하기 (thymeleaf) (0) 2023.03.29 [Spring Boot] 필터와 인터셉터 차이, 로그인 인증 체크하기 (0) 2022.11.02