1. Spring Security 의 구조와 JWT 발급 과정에 대해 설명해주실 수 있을까요?
1) Spring Security 의 구조
(1) Http Request 수신
(a) Spring Security 는 필터를 통해 동작한다
(b) 요청이 들어오면, 인증과 권한을 위한 필터들을 통한다
(c) 유저가 인증을 요청할 때 필터는 인증 메커니즘과 모델을 기반으로한 필터들을 통과함
(2) 유저 자격 기반으로 인증토큰(AuthenticationToken) 만들기
(a) username과 password 를 요청으로 추출하여 유저 자격을 기반으로 인증 객체를 생성한다
(b) username과 password 는 UsernamePasswordAuthenticationToken을 만드는데 사용한다
(3) 필터를 통해 AuthenticationToken 을 AuthenticationManager에 위임
(a) UsernamePasswordAuthenticationToken 오브젝트가 생성후 AuthenticationManager의 인증 메소드를 호출한다
(b) AuthenticationManager 는 인터페이스로 정의되어 있다
(c) AuthenticationManager 를 사용하기 위해 설정에 AuthenticationManagerBuilder를 이용해
UserServiceDetails를 매핑 해준다
(4) AuthenticationProvider 의 목록으로 인증을 시도한다
(a) 위치는 Core에 들어있다
(5) UserDetailsService 의 요구
(a) UserDetailsService 는 username 기반의 user details를 검색한다
(b) AuthenticationProvider 에서 제공하고 있는 DaoAuthenticationProvider 를 사용함
(6) UserDetails 를 이용해서 User 객체에 대한 정보를 검색
(a) UserDetailsService 는 인터페이스이므로, 우리가 인증하고자하는 비지니스로직을 정의한
service 레이어에서 구현을 실행하는 방식을 이용함
(7) User 객체의 정보들을 UserDetails 가 UserDetailsService(LoginService) 에 전달
(a) 데이터베이스에서 User 객체에 매핑된 정보를 가져와 UserDetailsService (LoginService) 에 전달
(b) 전달된 User 객체의 정보와 사용자가 요청한 인증정보 (username, password)를 확인하는 로직을
LoginService에 구현함
(8) 인증 객체 또는 AuthenticationException
(a) 유저의 인증이 성공하면 전체 인증정보를 리턴하고 실패하면 AuthenticationException 을 던짐
(9) 인증 끝
(a) AuthenticationManager 는 완전한 인증 객체를 Authentication Filter에 반환함
(10) SecurityContext 에 인증객체를 설정함
(a) Authentication Filter 는 인증객체를 SecurityContext 에 저장함
2) JWT 발급과정?
(1) Client 가 Server에 요청을 보냄 (로그인 인증 요청)
(2) Server는 Header, Payload, Signature 를 정의하고 각각 암호화해 JWT 생성
(3) Server 는 생성한 JWT 를 Cookie 에 담아 Client에게 발급
(4) Clinet 는 JWT 를 저장하고, 이후 인증이 필요한 요청마다 Authorization Header 에 Access token을 담아 보냄
(5) Server 는 발행했던 token 과 Client 로 부터 받은 token 의 일치 여부를 확인 (인증)
(6) token 이 서로 일치하면 payload 의 정보를 Client 에게 전달
(7) Access token 이 만료될 경우, Client 는 refresh token 을 Server 에 보냄
(8) Server 는 새로운 Access token 을 발급해 Client 에 전달
* JWT 장점
1) Header와 Payload로 signature 를 생성하기 때문에 데이터가 위, 변조 되었을 때 더 쉽게 판별 가능
2) Session 과 달리 별도 저장서 불필요, 서버를 stateless 로 유지가능, 정보를 자체적으로 보유할 수 있어
요청할 때마다 DB 조회를 하지 않아도 됨, 모바일 환경에서도 잘 동작함
* JWT 단점
1) token 의 길이가 길어 인증 요청이 많아질수록 네트워크 부하 위험이 있다 (DB 성능 면에선 이득)
2) token 을 탈취당할 경우 대처가 어려움
3) token 의 만료기간을 설정해두었을 경우, 그 전에 강제로 만료시키기 어렵다
4) payload 의 내용은 암호화되지않아 Server 와 Client 간에 나누는 내용에 중요한 정보 를 담을 수 없다 (ex.고객정보)
'항해99 기술면접 대비' 카테고리의 다른 글
23.10.20 항해 99 16기 기술면접 대비 (0) | 2023.10.20 |
---|---|
23.10.19 항해 99 16기 기술면접 대비 (1) | 2023.10.19 |
23.10.17 항해 99 16기 기술면접 대비 (0) | 2023.10.17 |
23.10.16 항해 99 16기 기술면접 대비 (1) | 2023.10.16 |
23.10.15 항해 99 16기 기술면접 대비 (1) | 2023.10.15 |