어떤 사용자가 로그인되어있다는 사실을 서버가 인지할 수 있게 해주는 방법
-> 로그인은 일단 꽤 무거운 작업이다. 데이터베이스에 저장된 사용자 계정의 해시값등을 꺼내와서 계산하고 일치하는지 확인해야함. 따라서 요청마다 아이디, 비번을 실어보낼수 없음. 보안도 위험
세션(stateful)
토큰(stateless)
사용자가 로그인에 성공하면 서버가 토큰을 만들어서 준다. 반으로 찢지 않고 그냥 준다. 즉, 서버는 뭔가를 기억하고 있지 않는다.
JWT(Json Web Token)은 마침표를 기준으로 1.헤더 2. 페이로드 3. 서명으로 나뉨
Claim: 토큰에 담긴 사용자 정보 등의 데이터
헤더엔 type으로 JWT가 들어감, alg는 3.서명을 만드는데 사용한 알고리즘이 지정됨
헤더와 페이로드, '서버에 감춰놓은 비밀 값'을 이 암호화 알고리즘에 넣고 돌리면 서명값이 나오는 것.
JWT 보완
수명이 몇시간이나 몇분 이하로 짧은 access토큰
보통 2주정도로 꽤 긴 refresh 토큰 -> 상응값을 데이터베이스에도 저장
-> 사용자는 access토큰의 수명이 다하면 refresh 토큰을 보낸다. 서버는 그걸 데이터베이스에 저장된 값과 대조해보고 맞다면 새로운 access 토큰을 발급
-> refresh 토큰만 안전하게 관리해주면 됨.