Auth(인증)을 통해 서비스는 유저를 검증할 수 있다.
Auth를 만들어야한다면 쿠키 세션 토큰 JWT를 알아야하는데
각 의미를 알아보고, 언제 무엇을 써야될지도 한번 알아보자!
클라이언트가 브라우저에 쿠키를 저장한 후
해당 웹사이트를 방문할 때 마다 브라우저는 해당 쿠키도 요청과 함께 보내게 된다.
쿠키는 도메인에 따라 제한되기도 한다.
쿠키는 유효기간이 있다.쿠키는 인증뿐만아니라 여러가지 정보를 저장할 수 있따.
왜 세션과 토큰이 필요한가!
로그인을 할 때 아이디 비밀번호를 서버에 보낸다
비밀번호가 맞으면 서버는 Session DB에 유저를 생성한다
해당 Session에는 별도의 ID가 존재
해당 Session ID는 Cookie를 통해 브라우저로 돌아오고 저장된다.
같은 웹사이트의 다른 페이저로 이동하면 브라우저는 Session ID를 갖고
있는 Cookie를 서버에게 보냄
Cookie는 자동으로 보내지는데
서버는 들어오는 Cookie를 보고 SessionID와 함께 오는 Cookie를 확인한다.
서버는 Session ID가 있는 Cookie를 지닌 요청만 있다는 것만 알뿐!
해당 Session ID를 가지고 Session DB를 확인할 것이고
거기서 해당 ID는 User ID 을 알게되면서, 서버까지 닿게 된다.
해당 요청이 끝나고 다른 페이지로 이동하게되면 이 프로세스가 반복된다.
중요한 유저정보는 모두 서버에 있다.
유저가 갖고있는것은 Session ID 뿐
Cookie는 그저 Session ID를 전달하기 위한 매개체일뿐이다.
Session을 이용해 IOS,Android 앱을 만들 수 있지만,
쿠키는 사용할 수 없다. 그래서 token 을 사용한다.
세션에서 중요한 것
Session :
유저가 로그인 하려면 유저명 비밀번호를 서버에 보낸다.
DB에 뭔가를 생성하지 않는다.
JWT :
Cookie는 공간제약이 있지만 JWT는 없다
동일하게 로그인을 했는데 DB를 건드리는 대신 정보를 사인하고 전달하는게 끝
이제 서버에 요청을 보내려면 Session ID에
해당 사인된 정보 혹은 토큰을 서버에 보낸다
서버는 토큰을 받으면 해당 사인이 유효한지체크하고 이는 토큰을 조작했는지 체크하는 것
토큰이 유효하다면 서버는 우리를 유저로 인증함
바로 이것이 세션과 JWT의 가장 큰 차이점이다.
세션에선 그냥 Session ID 만 주면됨 세션에 대한 모든 정보는 Session DB에 저장되어있다
페이지를 요청하면 서버는 Session ID를 DB에서 찾으면 됨
JWT에서는 서버는 유저를 인증하는데 필요한 정보를 토큰에 저장한다
그리고 해당 토큰을 우리에게 준다
페이지를 요청하면 서버는 해당 토큰이 유효한지만 검증하면 된다.
DB를 가질 필요없이!
주의할 점은 JWT는 암호화 되지는 않았다
암호화되었다면 아무도 읽수도 없고 이해할수없다
JWT의 경우 누구나 열어서 해당 컨텐츠를 볼 수있따
비밀정보를 JWT안에 둬서는 안된다
핵심은 토큰을 사인하고 이를 통해 유효한지 검증한다는것
Session을 사용하면 서버는 로그인된 유저의 모든 정보를 저장함.
해당 정보를 이용하면 새로운 기능을 추가할 수 있다
특정 유저를 강퇴하고 싶을때 세션을 삭제할 수도 있다.
이모든기능이 가능한 것 이유
서버가 누가 로그인했는지 저장했고 세션 db가 있기 때문이다.
다만, 염두할 점은 DB를 사고 유지해야하는 경제적 비용이 발생한다.
그리고 사용자가 늘어나면 날수록 DB도 커져야한다.
이를 위한 DB로는 Redis를 사용하는데 (Redis를 사용하는 회사들이 종종 있음.)
위 목적을 수행하기 위한 빠르고 저렴한 DB다
JWT를 사용하면 생성된 토큰을 추적하지 않는다.
서버가 아는 것은 토큰이 유효한가 여부일 뿐이다.
JWT는 DB를 따로 살 필요가 없다.
Session처럼 강제 로그아웃 기능을 사용 할 순 없다
데이터를 사인하고 유저에게 보내고 해당 데이터를 돌려받을때 유효성을 검증할 수 있다
DB없이 모든 것이 가능하다
Session이나 DB없이 유저 인증이 가능하다.
JWT인증의 제약만 잘 알아두면 된다
서비스가 더 커지고 유저 계정을 좀 더 잘 관리하고 싶다면 그때는 Session 으로 옮기자
쿠키 = 그냥 옮기는 시스템 매개체.
토큰 = 서버가 기억하는 긴 텍스트.
JWT 정보를 갖고있는 토큰 DB없이 검증할 수 있음
유저 인증을 위해서 JWT혹은 Session 을 사용가능