내일배움캠프 23일차 TIL : Spring - Spring Security, JWT
애플리케이션 내의 보안 중 사용자에 대한 인증과 인가에 대한 처리를 담당하는 프레임워크
사용자는 자신이 입증할 수 있는 정보를 시스템에 제공하며, 시스템은 제공받은 정보를 검증하여 시스템을 이용할 수 있는 사용자인지에 대해 확인하는 과정
어플리케이션에서 보호된 자원(메서드 접근 혹은 요청에 대한 자원) 에 대해 접근을 허가하거나 거부하는 기능
모바일이나 웹의 사용자 인증을 위해 인증에 필요한 정보를 토큰에 다시 담아서 암호화를 시켜 사용하는 인터넷 표준 인증 방식
Json포맷을 이용하여 사용자에 대한 속성을 저장하는 Web Token이다.
일반적으로 쿠키 저장소를 사용하여 JWT를 저장한다.
Client에서 Server로 최초 호출이 발생하는 경우 Header내의 토큰의 존재 여부를 체크한다.
토큰이 존재하지 않을 경우 로그인 페이지로 리다이렉트를 시켜 로그인 후 토큰을 발급 받는다.
토큰이 존재하는 경우
3-1. 토큰이 만료되었을 경우 : 재 발급을 위해 로그인 페이지로 리다이렉트를 시켜 로그인 후 토큰을 재발급
3-2. 토큰이 유요한 경우 : 토큰 내의 정보를 확인하여 가져온다.
Client에서 Server로 이후 호출이 발생하는 경우
4-1. 토큰이 만료되었을 경우 : 로그인 페이지로 리다이렉트를 시켜 로그인 후 토큰을 재발급
4-2. 토큰이 만료되지 않은 경우 : 정상적인 프로세스를 진행한다.
JWT는 누구나 평문으로 복호화가 가능하지만 Secret Key가 존재하지 않으면 JWT는 수정이 불가능하다.

Header는 토큰의 타입과 서명에 사용할 알고리즘으로 구성되어있다.
payload는 인증을 위해 사용할 실제 정보들로 구성되어있다.
인코딩된 헤더와 페이로드, 비밀 키 그리고 헤더에서 지정된 서명에 사용할 알고리즘을 기반으로 발급된다.
일단 구조만 정리해봤는데 이해하는데는 조금 어려울 수 있겠다....
참고한 블로그인데 되게 자세하다.
- https://adjh54.tistory.com/91 // Spring Security
- https://adjh54.tistory.com/93 // JWT