Web에서 세션, 토큰, 쿠키, jwt등 개발과정에서 로그인, 회원가입등을 사용하는데 그냥 구글링을 통해 단순히 구현하기보단
강의를 통해 개념을 배울 수 있었다.
Web 태그를 달기에는 애매한거 같아서 TIL로 작성..!!
먼저 인증/인가는 엄연히 다른 것인데 이해하자면 인증은 비밀번호등을 입력해 로그인 하는것, 인가는 회원/비회원 혹은 일반/관리자 와 같은 권한을 받는것
쿠키 vs 세션
쿠키는 "클라이언트"에 정보를 담은 파일을 저장(웹 브라우저)하고, 세션은 서버에서 일정시간 동안 클라이언트의 상태를 유지하기 위해 "서버"에 정보를 담는다.
가장 큰 차이점은 역시 어디에 저장하느냐인데 이에 따라 장단점이 갈린다
쿠키는 클라에 저장하기 때문에 서버의 부담이 덜하다는 장점이 있지만 쿠키 정보를 쉽게 변조가 가능하기에 보안에 취약하다.
세션은 반대로 서버에 저장하기에 서버의 부담이 크지만 쿠키보다 비교적으로 안전하고 만료 시점을 초기에 설정하는 것 이외 방도가 없는 쿠키와 달리 서버에서 설정할 수 있기에 유지보수? 에도 장점이 있다
JWT는 Json Web Token으로 JSON 형태로 정보를 저장하는 Token의 한 종류이다.
위에 세션 쿠키가 있는데 굳이 JWT를 사용하는 이유는 대용량 트래픽 처리를 위해 서버를 2대 이상 운용하게 되었고 각각 세션 마다 client의 정보가 다르기 때문에 공통의 Secret key를 통해 정보를 암호화 및 위조를 검증하는 과정을 수행한다
JWT는 동접자가 많을때 서버의 부담을 낮출 수 있고 클라이언트와 서버가 다른 도메인을 사용할 때 장점을 가진다. 하지만 구현이 복잡해지고 토큰에 담는 내용이 커질수록 네트워크의 비용이 증가한다. 그리고 Secret Key를 잘 관리해야하는데 (깃허브 ㄴㄴ) 이 키가 유출되면 JWT를 조작하고 비밀번호나 개인정보 같은 민감한 내용이 유출될 수 있다.