spring security는 어플리케이션에 보안 기능을 제공하는 스프링 하위의 프레임워크이다. 보안 기능이라 함은 어플리케이션 내의 사용자의 인증(Authentication)과 인가(Authorization)를 판별해주는 기능이다. 인증과 인가는 개념을 깊이 아는 것보다는 군대에서의 경계 근무를 예로 설명이 가능하다. 인증의 경우 '손들어 움직이면 쏜다!' 라고 하며 신원불명자의 신원을 파악하는 것이고, 인가는 '중대장님이십니까?' or '사단장님! 필씅!' 처럼 그사람의 지위 혹은 접근가능 범위에 대해 파악하는 것이다.
Filter 기반으로 동작하여 MVC와 분리하여 관리 및 동작한다.
어노테이션을 통해 간단한 설정이 가능하다.
서버가 가동되면 별도의 설정을 하지 않더라도 Spring Security 내의 기본적인 웹 보안 기능이 연동된다.
-> 모든 요청은 인증이 되어야 자원에 접근 가능
-> 인증 방식으로 Formlogin 방식과 httpBasic 방식 제공
Http Basic 인증은 말 그대로 Http 프로토콜에서 정의한 기본 인증이다. 인증 방식에는 요청, 인증 요구, 인증, 성공 4단계로 나뉜다. 각각의 단계에는 HTTP 헤더가 사용자와 서버 사이의 요청, 응답 과정에서 부가적인 정보를 같이 전송해주는 역할을 한다.
Form Login은 HTTP Basic과 달리 클라이언트가 요청받은 인증방식 대로 헤더에 기술해서 서버로 보내는 방식이 아니라 세션 방식의 인증이다.
HTTP 프로토콜은 stateless한 특징이 있어 클라이언트의 정보를 서버에 저장하지 않고, 서버로부터 응답을 받으면 그 즉시 연결이 해제된다. 클라이언트와 서버 사이의 연결을 계속 유지되는 것과 같은 효과를 주기 위해 세션과 쿠키를 활용한 form login 방식을 사용한다.
클라이언트가 server에 특정 URL을 요청했을 때 해당 URL이 인증이 필요할 경우 server는 인증을 위해 login 페이지를 리턴한다.
사용자가 username, password를 입력하면 클라이언트는 form 로그인 방식으로 서버에 인증을 요청한다.
서버는 해당 로그인 정보를 db로부터 확인한 후, 사용자 정보가 존재한다면 세션 객체와 세션 ID를 포함한 세션 쿠키를 생성한다. 이렇게 생성된 세션 쿠키는 세션 ID로 동일한 클라이언트가 요청을 할 때마다 메모리에서 생성한 HTTP 세션 객체를 가져오기 위해 사용된다.
응답 데이터와 함께 세션 쿠키가 웹 서버에 전달된다.
세션 쿠키는 클라이언트의 웹 브라우저에 응답과 함꼐 전달되고 HTTP 연결은 끊어진다.
세션 ID를 포함하는 세션 쿠키는 클라이언트의 웹 브라우저에 저장된다.
웹 브라우저를 종료하면 세션 객체와 쿠키는 자동적으로 삭제된다.