인증 정보를 클라이언트 측에 저장한다 빼곤 없나
세션은
1. 세션을 서버에 저장하고 쿠키에 실어서 클라이언트에 전송
2. 클라이언트가 서버에 쿠키와 함께 요청을 보내고, 서버는 쿠키를 키로 저장한 사용자 식별자, 이메일 주소등을 먼저 조회
3. 2에서 가져온 값으로 디비 조회해서 권한 인가
이거 잖아?
JWT는
1. 서버는 인증된 사용자에게 토큰을 발급
2. 클라이언트는 토큰을 요청시에 Authorization 헤더에 포함시켜 전송
3. 서버는 헤더를 복호화하고, 내부에 포함된 payload 중 일부 값을 이용하여 DB 조회해서 권한 인가
이거 맞나?
세션은 DB 두번 조회해야되는데
토큰은 인증정보를 서버에 저장하지 않고 권한 인가시에도 DB를 한번만 조회해도 되서 서버 부하가 줄어든다 뭐 이런건가
서버가 스케일아웃 되어있다고 할때 세션 방식이면 한 서버에서 로그인 됐어도 다른 곳에서 인증이 안돼서 추가적인 작업을 해야하는데 jwt는 토큰만 있으면 어디서든 다 인증 가능
세션 저장용 스토리지 따로 두면 그것도 해결됨
스케일 아웃한다고 서버쪽에서 세션 검사 못하는거 아니야. 그건 로컬인메모리 스토리지 이용할때나 그런거지 뒷단에 레디스같은거 써도되고 디비를 써도 되는거임
그래서 추가적인 작업 해야한다고 했잖아 븅딱아
복호화 아님. 해당 데이터로 다시 해시 돌려서 같은 결과 나오는지 보는 거임. HMAC임
jwt가 알고리즘.페이로드.해시값 으로 이루어져 있음. 페이로드를 서버 내에 존재하는 키로 해시 돌렸을때 나온 해시 값이 토큰 내의 해시 값이랑 일치 여부로 토큰이 유효한가 봄
그게 복호화야 X->Y 로 변환으로 원본의 내용을 다른 내용으로 변환하는거 자체가 암호화임.
나도 쓰면서 궁금했는데 .. 명확한 해답 없나? - dc App
JWT를 사용하면 DB 접근 없이 JWT의 정보를 그대로 신뢰하면 됨 토큰 쓰는데 DB접근하는 방식으로 할 필요가 없음
근데 유저 권한이 변경되면?
토큰 방식으로 인증하면 권한 수정은 당연히 실시간으로 반영이 안 됨. 로그인을 다시 하거나 권한 수정을 다른 방법으로 감지시켜야지
이게 JWT 사용하는 인터넷상의 여러 예시들이 DB 접근하는 코드를 만들어놔서 자연스럽게 그런 줄 알게 된건데, 그럴 필요가 없음. JWT에 저장된 정보는 단 한 글자만 변조되어도 조작된걸로 판별이 가능하기 때문에 토큰은 그대로 믿고 가면 된다.
내 말은 예를들어 DB에 유저 권한이 어드민 사용자로 등록되어있는데, 이 친구가 시스템에 의해 일반사용자로 변경이 되었어. 엑세스토큰 재발급 이전에는 토큰 자체에는 권한이 관리자 권한을 가지고있는 것으로 나올건데 이 경우가 문제인거같아서
리소스 서버랑 인증서버가 따로인 상황을 생각해야됨. 토큰쓰면 리소스서버가 인증서버에 계속 요청할 필요가 없음 토큰 발급할 때만 요청하고.
이게 맞다. 대부분 토이프로젝트는 이런 개념이 없으니까 ㅋㅋㅋㅋ