토큰기반
- JWT (Json Web Token)
- 데이터가 JSON으로 이루어져 있는 토큰
세션 기반 인증 vs 토큰 기반 인증
세션 기반 인증
- 서버가 사용자의 로그인 상태를 기억
- 사용자 > 로그인 > 서버 > 정보저장 > 세션 id 발급 > 요청 > 세션 조회 > 응답
- 세션 id는 브라우저의 쿠키에 저장
- 세션 저장소: 메모리, 디스크, 데이터베이스
- 단점
- 서버를 확장하기가 어려움
- 서버의 인스턴스가 여러개가 되면 세션 공유가 필요해 별도의 데이터베이스를 만들어야 한다
토큰 기반 인증
- 로그인 이후 서버가 만들어주는 문자열
- 문자열에는 로그인 정보가 들어있고, 해당 정보가 서버에서 발급되었음을 증명하는 서명
- 사용자 > 로그인 > 서버 > 토큰 발급 > 토큰과 함께 요청 > 토큰 유효성 검사 > 응답
- 서명 데이터는 해싱 알고리즘을 통해 생성
- HMAC SHA256, RSA, SHA256 알고리즘
- 서버에서 만들어주기때문에 무결성이 보장
- API 요청할때마다 토큰을 함께 요청
- 장점
- 로그인 정보를 기억하기 위해 사용하는 리소스가 적다는 것
- 확장성이 높다. (인스턴스끼리 로그인 상태를 공유할 필요가 없음)