Spring/Spring Security

[Spring Security][KoLiving] 4. JWT 토큰 기반 인증

noahkim_ 2023. 10. 3. 16:28

* 이전 포스팅에서 다루었던 JWT 토큰 설명을 참고해주세요

 

인증 시스템을 개발하면서 사용해야 할 기술을 정하는 중에 세션과 토큰 두개의 선택지가 있었습니다.

  장점 단점
세션 - 서버에서 사용자 세션을 제어할 수 있다 - 서버에서 사용자 세션 관리를 위한 자원소모가 크다.
- 세션 유지로 인해 서버의 확장성에 제약이 생길 수 있다.
토큰 - 서버의 확장성에 제약이 없다.
- 플랫폼간의 인증방식을 일관되게 관리할 수 있다.
- 여러 서비스간의 통합 인증이 용이하다.
- 토큰이 탈취되면 클라이언트의 연결을 제어할 수 없다.
- 사용자 세션을 제어할 수 없다

저희는 '토큰' 기반으로 인증을 구현하기로 결정하였습니다.

'토큰' 기반의 장점과 단점을 고려하여 시스템 구현 방향을 설정하였습니다.

  • KoLiving은 모바일에서도 제공하는 서비스입니다.
    • 여러 플랫폼에서 같은 방식으로 인증을 처리할 수 있어 인증 메커니즘이 호환됩니다.
    • 이는 플랫폼 별도로 인증 메커니즘을 구현하지 않아도 되는 이점을 가집니다.
  • 서버의 확장성이 뛰어납니다.
    • 세션 기반 인증은 Scale-Out 확장시에 복잡성이 증가할 수 있습니다.
    • 토큰 기반 인증은 Scale-Out 확장시에 제약이 없어 명료하게 시스템이 구성됩니다.
  • 토큰 탈취의 위험을 줄이도록 설계하였습니다.
    • 토큰 탈취의 위험성을 고려하여 AccessToken 유효기간을 짧게 부여합니다.
    • 악의적인 공격자의 AccessToken 재사용 방지를 위해 Black List 시스템을 운영합니다.
    • RefreshToken Rotate 방식을 도입하여, 악의적인 공격자에게 RefreshToken이 탈취될 경우의 위험을 최소화합니다.