토큰 기반 인증은 사용자의 상태를 저장하지 않는 상태less한 방식이다. 처음 사용자가 로그인을 하면 서버에서 사용자의 정보를 암호화한 토큰을 생성하여 사용자에게 전달한다. 그리고 사용자는 이 토큰을 클라이언트 측에 저장하여 인증이 필요한 요청을 보낼 때마다 토큰을 함께 보낸다. 서버는 이 토큰을 해독하여 사용자를 인증한다.
JWT(JSON Web Token)는 웹 표준(RFC 7519)으로, 두 개체에서 JSON 객체를 사용하여 가볍고 자가 수용적인 방식으로 정보를 안전하게 전송할 수 있도록 설계되었다. JWT는 헤더(Header), 페이로드(Payload), 시그너처(Signature)의 세 부분으로 구성되어 있다.
헤더: 토큰의 타입과 해싱 알고리즘 정보를 포함한다.
페이로드: 전송할 데이터(클레임)를 포함한다.
시그너처: 헤더와 페이로드를 암호화한 값이다.
리프레시 토큰은 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급받을 수 있게 하는 토큰이다. 이를 사용하면 사용자가 로그아웃하거나 장기간 비활동 상태가 아니라면 로그인을 유지할 수 있다.
스프링 시큐리티 컨텍스트는 인증 객체를 저장하는 공유 영역이다. 이를 통해 현재 사용자의 인증 정보를 어디서든 쉽게 접근할 수 있다.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
위의 코드를 통해 현재 사용자의 인증 객체를 가져올 수 있다.
스프링 시큐리티는 필터를 통해 보안 처리를 한다. 필터는 서블릿 필터와 동일한 인터페이스를 구현한 객체로, HTTP 요청이 서블릿에 도달하기 전에 수행되는 작업을 정의한다. 스프링 시큐리티에서는 다양한 보안 기능을 필터 형태로 제공한다.