단순한 토이프로젝트를 만드는데 있어서 JWT를 활용해보려고 했다.
방식은 단순했다.
로그인을 하면 토큰을 발행하여 쿠키에 저장했고, 요청마다 Header에 넣어서 확인을 했다.
문제는 로그아웃 부분이였다.
쿠키에서 삭제한다 해도, 누군가 토큰을 탈취해서 따로 저장해두면 그만이였다.
그러면 서버 어딘가에 로그아웃된 토큰이라는 정보를 저장해두어야 한다(Redis를 많이 쓴다고 하더라)
그러면 stateless의 장점이 사라지는 것이다.
내가 느낀 점은,
1. 민감하지는 않지만 식별이 되는 정보를 넣어야 한다.
- JWT의 payload에 괜히 수많은 정보가 들어가는 것이 아니다. 예를 들면 로그인이 진행되어 토큰이 발급된 기기에 대한 정보가 필요하기도 하다.
그런데, JWT의 특성상 위조가 불가할뿐 누구나 내용을 확인 가능하다.
그래서 식별자랍시고 민감한 내용을 넣을 경우 문제가 될 수 있다.
2. JWT하나로만 구현하면 안된다.
- JWT는 모든것을 대체할 마스터키같은 존재가 아니다.
보안을 높이면 편리성,확장성이 떨어지고 편리성이 높아지면 보안이 떨어진다.
이 외에도 여러가지 모순되는 요구사항에서 조금더 균형을 잡고자 올라간 무게추일 뿐이다.
어떤 상황에서 어떤 요구조건인지를 잘 확인해서 적용해야지, 경우에 따라서는 오히려 세션을 이용한 전통적인 로그인 구현이 더 나을 수도 있는 것이다.
'개발일기' 카테고리의 다른 글
HTTP와 HTTPS의 차이점 (0) | 2023.12.10 |
---|---|
SpringBoot에서 encrypt 기능만 사용하고 싶을때 (1) | 2023.11.22 |
비전공 개발자로서 개발 공부하는것... (0) | 2022.12.30 |
현재 로그인ID를 파라미터로 받는 방법...? (0) | 2022.12.28 |
221227 Interceptor에서 예외,조건불충분에 대한 처리는 어떻게 할까? (0) | 2022.12.27 |