jwt를 쓰는 가장 큰 이유가 stateless 하기 때문이잖아
한번 로그인 성공하면 토큰 발급해서 만료될때까지 db lookup 안하고 통과 시킬수 있는 ㅇㅇ
근데 jwt는 한번 발급되면 그 유효기간동안은 수정도 안되고 폐기도 안되잖아
그래서 위험부담 때문에 access token은 최대한 짧게 잡고 refresh token으로 갱신시키는거고
근데 난 access token 짧게 하는걸로는 성이 안차고 관리자가 유저를 밴시키면 유저가 토큰 남은 시간동안 깽판 못치게 그냥 토큰을 바로 revoke 시키고 싶거든
그래서 jwt id랑 유저id 를 키로 db에 세션정보를 저장해놓고 유저가 로그아웃하거나 밴당하면 키를 삭제하고 있음
내가 궁금한건 이런 방식이면 굳이 jwt를 안써도 되는거 같거든??
내가 jwt를 이상하게 쓰는거임?
이 모델이면 jwt씀으로 얻는 이득은 그냥 유저가 로그인해서 로그아웃 하기전까지 db lookup 안하는정도? 로밖에 안보임
그냥 기존의 세션 방식이랑 차이가 없어보여
글 빨리 쓴다고 내용이 파악안될수도 있는데 요약은 JWT의 문제점 1. 공격자가 토큰을 탈취 했을 때 서버에서 할 수 있는게 없음. access token이 유효하면 계속 접근 가능 (그래서 그냥 access token 짧게 하는게 그나마 예방책) 2. 유저를 밴 했을 때 1번과 마찬가지로 access token이 만료 될 때가지 실제로 유저가 밴 효과를 못받음 저 두개의 이유 때문에 jwt를 서버에서 세션으로 따로 또 저장하고 있는 상태임 이런식으로 jwt를 쓰면 굳이 세션 방식이랑 차이가 없는거 같은데 jwt를 고집할 이유가 있나 궁금함
그런데 밴해야되면 로그아웃 하기 전까지 db lookup 안할수 없지 않음? 그냥 세션 쓰면 될듯
미안 먼말인지 잘 이해가 안됨 지금은 jwt를 세션처럼 사용하고 있어서 밴하면 그냥 바로 밴되는데 stateless하게 사용하면 밴시켜도 토큰 유효할때까진 db lookup 안하고 활동할수 있어서 그거때문에 세션쓰고 있음 근데 jwt를 세션처럼 사용하지 말라는 글이 많길래
db lookup해서 밴 기능 구현하고 db 터졌을땐 밴 기능 스킵하는 식으로 안전하게 구현가능
밴 기능에 문제가 있는게 아니야 밴 되기전에 로그인해서 토큰 발급 받고 밴당하면 다시 로그인하거나 리프레쉬 토큰으로 액세스 토큰 갱신하기전까진 계속 활동할 수 있는게 문제임
보통 블랙리스트로 밴하는데 이건 어쩔 수 없이 stateful함 - dc App
ㄹㅇ 암만 생각해도 토큰 버릴려면 stateful 방법밖에 생각안남