들어가며
지금까지 프로젝트를 몇개 하면서 Spring Security를 많지는 않더라도 사용해본 경험이 있고 Token을 이용한 로그인 회원가입 구현이 대충 가능하여도 부족함을 느겼고 github을 찾아보고 공부를 하는데, 사람마다 정리, 처리, 역할, 스타일등 통일이 안되어 있고 입맛대로 쓰는 경우가 허다해서. 이 글을 통해 spring security 대해 헷갈리지 않게 정확한 정의와 사용법의 확립이 필요했기에 이번 글을 작성하게 되었다.
Spring Security란?
사용자 정의가 가능한 인증 및 액세스 제어 프레임워크입니다. 이는 Spring 기반 애플리케이션의 보안의 표준
특징
- 인증 및 권한 부여에 대한 포괄적이고 확장이 가능함
- 세션 고정, 클릭재킹, 크로스 사이트 요청 위조와 같은 공격 보호
- 서블릿 API 통합
- Spring Web MVC와 통합
- 등등...
용어 정리
- 인증(Authentication): 사용자가 본인인지 확인하는 절차
- 인가(Authorization): 인증된 사용자 접근 결정
- 접근 주체(Principal): 보호받는 리소스(Resource)에 접근하는 대상
- 비밀번호(Credential): Resource에 접근하는 대상의 비밀번호
- 권한:
- 인증된 주체가 어플리케이션의 동작을 수행할 수 있도록 허락되어 있는지를 결정
- 인증 과정을 통해 주체가 증면된 이후 권한을 부여할 수 있다.
동작 원리~!
위 사진은 spring security를 공부하기 위해서라면 꼭 볼 수 있는 spring seurity방식을 지정해 놓은 사진이다. 그럼 설명 들어간다.
- HTTP Request 즉 사용자 정보가 담긴 요청을 보낸다
- Authentication Filter에서 UsernamePasswordAuthenticationToken이라는 인증용 객체를 생성하게 된다. 이때 UsernamePassWordAuthenticationToken은 해당 요청을 처리할 수 있는 Provider을 찾는데 사용된다.
- Authentication Filter에서 받은 인증용 객체를 Manager에게 위임하게 된다. 이때 Manager은 Provider들을 List 형태로 갖고 있다.
- Token을 처리할 수 있는 Authentication Provider을 선택하여 Authentication 객체를 전달
- 선택된 Authentication Provider은 DB에 있는 사용자 정보를 가져와 비교하고 Authentication 객체를 가져온다.
- 인증에 성공하게 되면
- AuthenticationProvider에 인증된 인증용 객체를 Authentication에 담는다.
- AuthenticationManager한테 Authentication객체를 보내면서 알려준다.
- Authentication 객체를 전달 받은 AuthenticationFilter
- AuthenticationFilter은 SecurityContextHolder에 Authentication 객체를 저장.
우선은 흐름도를 간추렸는데 다음 시간은 각 Filter들이 무슨 일을 하는지 정리해볼 것 같기도 하고..?
아니면 그냥 프로젝트나 빨리 만들려고 한다. 그럼 20000~
'spring_boot > security' 카테고리의 다른 글
Access Token과 Refresh Token이 필요한 이유 (0) | 2024.04.08 |
---|---|
JWT란? (0) | 2024.04.07 |