- JWT는 JSON Web Tokens의 약자로, 인증된 토큰을 위한 표준임.
- JWT는 헤더, 페이로드, 서명 또는 메시지 인증 코드로 구성됨.
- 검증 키를 가진 사람은 페이로드의 진위 여부를 확인할 수 있음.
JWT의 일반적인 사용 패턴
- JWT는 발행자, 수신자, 주제, 만료 시간 등의 정보를 포함함.
- 수신자는 토큰의 진위 여부를 확인한 후, 만료 시간이 지나지 않았는지 확인하고, 주제를 인증된 사용자로 간주함.
JWT의 장점
- JWT의 주요 장점은 수신자가 사용자 데이터베이스에 연결하지 않고도 토큰의 진위를 확인할 수 있다는 점임.
- 대규모 설치 환경에서는 인증 서비스가 중앙 사용자 데이터베이스에 접근하는 유일한 서비스가 될 수 있음.
로그아웃 및 세션 무효화 문제
- 인증 토큰의 수명이 짧아야 함. 예를 들어, 최대 5분.
- 클라이언트는 새로운 인증 토큰을 요청할 수 있는 리프레시 토큰도 발급받음.
- 리프레시 토큰이 실제 세션 토큰 역할을 함.
JWT가 필요 없는 경우
- 로그아웃을 구현하려면 유효한 JWT의 허용 목록 또는 취소된 JWT의 거부 목록을 유지해야 함.
- 사용자를 차단하려면 데이터베이스에서 "사용자 활성" 플래그를 확인해야 함.
- 사용자 객체와 다른 객체 간의 추가 관계가 필요함.
- 데이터베이스와 관련된 작업을 수행함.
결론
- 위의 조건 중 하나라도 해당된다면, JWT가 필요 없음.
- 일반적인 불투명 세션 토큰을 사용하고 데이터베이스에 저장하는 것이 더 나음.
- JWT의 단점을 피하고 복잡성을 줄일 수 있음.
GN⁺의 의견
- JWT는 대규모 서비스에 적합하지만, 대부분의 소규모 서비스에는 과도한 복잡성을 초래할 수 있음.
- 일반적인 세션 관리 메커니즘이 대부분의 웹 애플리케이션에 충분함.
- JWT를 사용하면 로그아웃 및 세션 무효화와 같은 기능을 구현하는 데 어려움이 있을 수 있음.
- JWT의 장점을 활용하려면 서비스의 규모와 요구 사항을 신중히 고려해야 함.
- 다른 대안으로는 OAuth2와 같은 인증 프레임워크를 고려할 수 있음.