SEB_BE_43 / 23.03.15 회고

rse·2023년 3월 15일
0

코드스테이츠_BE_43

목록 보기
54/65

오늘

  • Spring Security

Spirng Security

Spring MVC 기반 애플리케이션 인증과 인가 기능을 지원하는 보안 프레임워크이다.

인증 = 누구인지를 확인하는 절차

인가 = 누구인지를 알았으니 그에 맞는 권한을 체크하는 것.

많이 사용하는 용어

  • Principal(주체)
애플리케이션에서 작업을 수행 할 수 있는 사용자, 디바이스 또는 시스템 등이 될 수 있다.
일반적으로 인증 프로세스가 성공적으로 수행된 사용자의 계정 정보를 의미한다.
  • Authentication(인증)
애플리케이션을 사용하는 사용자가 본인이 맞음을 증명하는 절차를 의미
- 이 기능을 정상적으로 수행하기 위해서는 사용자를 식별하기 위한 정보가 필요한데,
이를 Credential(신원 증명 정보)라고 한다.

예시로 은행에 갔을 경우 나를 증명하기 위해 신분증을 보여주는 것.
  • Authorization(인가, 권한 부여)
Authentication(인증)이 정상적으로 수행된 사용자에게 하나 이상의 권한(authority)을 부여하여 
특정 애플리케이션의 특정 리소스에 접근할 수 있게 허가하는 과정을 의미한다.
- 인가 과정은 반드시 인증 과정 이후 수행되어야 하며, 권한은 보통 역할(Role) 형태로 부여된다.
  • Access Control(접근 제어)
사용자가 애플리케이션의 리소스에 접근하는 행위를 제어하는 것을 의미한다.

왜 사용해야하는가?

  • Spring Security 말고 Apache Shiro, OACC 같은 java 애플리케이션을 위한 프레임워크가 있지만, Spring Security 가 다른 보안 프레임워크에서 제공하는 기능들을 모두 아우르는 기능을 제공하고 있다.

  • 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에, 인증, 리소스 권한 등의 보안 관련 로직을 작성하지 않아도 된다.

  • 커스터마이징 기능이 있어서 필요한 기능만 사용하고 싶다면 커스터마이징이 가능하다.

  • Spring Security는 다양한 인증 방식을 지원하므로 기존 시스템과 연동하기 쉽다.

  • Spring Security는 Spring Framework의 일부로 개발되어 커뮤니티에서 지원을 받을 수 있다. 또한, Spring Security의 다양한 기능들에 대한 문서와 예제가 많이 제공되어 있어 사용하기 편리하다.

처리 흐름

  1. 사용자가 리소스를 요청한다.

  2. 인증 관리자가 사용자의 크리덴셜 요청한다. (크리덴셜이란 사용자를 증명하기 위한 구체적인 수단. 일반적으로 패스워드에 해당한다.)

  3. 사용자에게 받은 크리덴셜을 크리덴셜 저장소에서 조회를 한다.

  4. 크리덴셜 저장소의 크리덴셜과 사용자에게 받은 크리덴셜을 검증한다.

  5. 유효한 크리덴셜이라면 접근 결정 관리자가 사용자의 권한을 검증한다.

  6. 적절한 접근 권한이 있다면 리소스를 제공한다.

Servlet Filter와 Filter Chain

아까 처리 흐름에 사용되었던 그림에서 사용자의 요청이 리소스에 도달하기 전에 인증관리자나, 접근 결정 관리자 같은 컴포넌트가 중간에 웹 요청을 가로채 검증 하는 것을 알 수 있다.

애플리케이션 엔드포인트에 도달하기 전에 중간에서 요청을 가로챈 후 어떤 처리를 할 수 있는 포인트를 제공하는 것을 Servlet Filter(서블릿 필터) 라고 한다.

서블릿 필터
- JAVA에서 제공하는 API이다. 
- javax.servlet.Filter 패키지 안에 인터페이스로 정의 되어 있다.
- javax.servlet.Filter 인터페이스를 구현한 서블릿 필터는 웹 요청을 가로채 전처리를 할 수 있고,
엔드포인트가 끝난 뒤 전달되는 Response(응답)을 클라이언트에게 전달하기 전 후처리도 가능하다.

서블릿 필터는 하나 이상의 필터들을 연결해 Filter Chain(필터 체인) 으로 구성 할 수 있다.

서블릿 필터는 각각의 필터들이 doFilter()라는 메서드를 반드시 구현해야하며, doFilter() 메서드 호출을 통해 필터 체인을 형성하게 된다.

Spring Security 필터 역할

보안에 대한 작업을 하려면 Spring Security를 적용해야한다.
그럴려면 spring security도 필터를 이용해 클라이언트의 요청 중간에서 보안에 대한 작업을 해야하는데 어떻게 하는가?

Spring Security Filter는 Spring 컨테이너에서 동작한다.
Servlet Filter는 Servlet 컨테이너에서 동작한다.

서로 동작하는 곳이 다르기 때문에 DelegatinFilterProxy와 FilterChainProxy를 통해서 Spring Security Filter를 동작시킬 수 있다.

DelegatinFilterProxy

Servlet 소속이지만 Spring Security Filter 를 연결해주는 다리 역할을 한다.

FilterChainProxy

여기서부터 진짜로 Spring Security Filter를 사용하기 위한 진입점이라고 볼 수 있다.
FilterChainProxy 부터 Spring Security에서 제공하는 보안 필터들이 필요한 작업을 수행한다

기본 구조

이번에는 CSR방식말고 SSR 방식으로 구현.

로그인 화면.
HTML form 태그로 구성되어 있고, HTML form 방식으로 로그인을 진행하기 때문에 이러한 인증 방식을 폼 로그인 인증 이라고 부른다.

Inmemory User 인증 설정

데이터베이스 연동 없는 로그인 인증

데이터베이스 연동 로그인 인증

profile
기록을 합시다

0개의 댓글