세션 기반의 인증방식은
클라이언트의 인증정보를 서버측에서 저장하고 관리한다. 이때 세션을 식별하기위한 Session ID를 기준으로 정보를 저장하고 해당 Session Id는 쿠키로 저장된다. 장점으로는 상대적으로 안전하고 서버에서 로그인 상태확인이 굉장이 유용하다는 점이 있지만 단점으로는 유저들의 세션에 대한 정보를 서버 메모리에 들고 있기 때문에 이를 조회하는 과정이 이용자가 많아질 경우 부담이 갈 수 있다는 점이있다.
토큰기반의 인증방식은
유저가 로그인 후 서버에서 정보를 기록하는 대신에 토큰을 발급한다. 클라이언트는 발급받은 토큰을 저장해 요청마다 Header에 토큰을 담아 보내고 서버에서는 해당 토큰을 확인한다. 장점으로는 서버 메모리에 부담이 되지않는다는 점이 있지만 반대로 데이터자체의 길이가 길어서 요청이 많아질 경우 네트워크 부하가 심해질 수 있다.
jwt
jwt란 인증에 필요한 정보들을 암호화시킨 JSON토큰을 의미한다.
Header,PayLoad,Signature로 이루어져 있으며 이를 암호화하여 생상하고 쿠키에 담아서 클라이언트에게 발급한다. 서버는 클라이언트가 보낸 jwt가 서버에서 발행한 토큰인지 확인하고 페이로드에 들어있는 유저의 정보를 클라이언트에게 돌려준다.
장점으로는 데이터 변조를 막을 수 있고, 별도의 저장소가 필요없다는 점과, 소셜계정을 이용하여 다른 웹서비스에서도 로그인할 수 있다는 점이 있다.
단점으로는 토큰자체에 정보를 담고 있다는 점과 정보가 많아질수록 토큰의 길이가 길어져 네트워크에 부하를 있다는 점이다. 또한 토큰 자체를 탈취당할 경우 대처가 어렵다.
액세스토큰
클라이언트가 갖고있는 실제로 유저의 정보가 담긴 토큰
클라이언트가 서버에 요청할때 Authorization Header에 담겨져서 보내지게 된다.
액세스토큰의 시간이 만료될 경우 리프레시토큰을 이용해서 서버로부터 새로운 액세스토큰을 발급받게된다.
리프레시토큰
새로운 액세스토큰을 발급하기 위해 사용되는 토큰 보통 데이터베이스에 유저정보와 같이 기록된다.
개발일지