[Spring Security] 7. 블랙리스트 기능 구현하기

전유림·2024년 3월 13일
0

Spring Security

목록 보기
8/8

이전 프로젝트에선 블랙리스트 기능을 구현하지 않아서 로그아웃 후에도 해당 엑세스 토큰으로 인증이 필요한 앤드포인트에 접근이 가능한 이슈가 있었다.

로그아웃 후에도 해당 엑세스 토큰으로 인증이 가능한 문제는 보안상 심각한 문제라고 볼 수 있다. 이는 토큰이 유효한 상태로 남아있기 때문에 발생하는 문제이며, 이를 방지하기 위해서는 로그아웃 시에 해당 엑세스 토큰을 무효화하고 블랙리스트에 추가하는 기능이 필요했다.

그러나 이를 구현하는 과정에서 stateless의 이점을 일부 잃을 수 있다.

일반적으로 stateless architecture에선 클라이언트의 상태를 서버에 저장하지 않고 모든 정보를 토큰에 담아 처리한다. 즉 서버는 클라이언트의 상태를 기억하지 않게 된다.

그러나 로그아웃 시에 토큰을 블랙리스트에 추가하는 것은 클라이언트의 상태를 서버에 저장하는 것과 유사한 역할을 수행하게 된다.

보안을 강화하기 위해서는 토큰 무효화와 블랙리스트 기능이 필요하지만, 이로 인해 stateless의 이점이 일부 손실될 수 있다는 것을 염두해야 될 것 같다.


LogoutHandler 인터페이스를 구현한 CustomLogoutHandler 클래스의 logout 메서드는 로그아웃 작업을 수행한다. 클라이언트가 전송한 요청에서 로그아웃에 필요한 정보를 추출하고, 해당 정보를 사용하여 토큰을 무효화하고 블랙리스트에 추가한다.

이렇게 함으로써 클라이언트가 로그아웃한 후에도 해당 토큰을 사용하여 접근하는 것을 방지할 수 있다.

로그인 시 레디스에 저장했던 리프레시 토큰 정보를 삭제하여 이후 토큰 재발급과 관련된 작업을 무효화 시킬 수 있다.

현재 엑세스 토큰의 유효 시간만큼 레디스에 블랙리스트로 저장되어 해당 기간 동안에만 해당 엑세스 토큰으로 접근이 불가능하도록 보안을 강화한다.

0개의 댓글