쿠키나 세션을 이용한 인증보다 더 보안성이 강하고 효율적인 인증 방법이다.
쿠키 인증은 쿠키에 아이디나 암호와 같은 사용자 정보를 담아 서버로 보내게 되는데, HTTP 방식의 통신을 사용할 경우 제 3자가 해당 정보를 염탐할 수 있다.
세션의 경우 세션ID를 보내므로 쿠키에 비해 보안성이 높다고 볼 수 있지만 서버에 추가적인 DB 공간이 필요하다는 단점이 있다.
📌 세션 기반 인증
: 서버 측에 클라이언트의 접속 상태를 저장
📌 토큰 기반 인증
: 토큰에 사용자 인증을 위한 정보가 담겨있기 때문에 서버에 사용자 정보를 저장하지 않고, 전달받은 토큰의 서명과 데이터를 검증하는 것 만으로 인증이 가능함
✔ 쿠키 < 세션 < 토큰
🤷♀️ 왜 쿠키와 세션이 아닌 토큰을 사용했는지?
클라이언트와 서버 혹은 서비스 간의 통신시 정보를 JSON 객체를 통해 안전하게 전송하고 권한(Authorization)을 위해 사용되는 토큰이다.
JWT는 편하게 확인하고 인코딩하도록 도와주는 도구라면, Bearer는 많은 수단 중 하나의 문자열일 뿐이다.
JWT(Json Web Token)은 정보를 JSON 객체로 안전하게 전송하기 위한 간결한 방법을 제공하는 개방형 표준이다.
📌 쿠키와 세션의 단점을 해결할 수 있는 방법
JWT 토큰 구조
데이터가 인코딩이 되어있기 하지만 누구나 디코딩을 할 수 있어서 데이터 유출에 대한 피해가 있을 수 있지만 서명 필드는 헤더와 페이로드를 통해 만들어지기 때문에 데이터 변조 후 재전송하는 것을 막을 수 있다.
장점
단점
일반적으로 토큰은 헤더의 Authorization 필드에 담아져 보내진다.
Authorization: <type> <credentials>
🔎 bearer는 위 형식에서 type에 해당하고 서버는 다양한 종류의 토큰을 처리하기 위해 전송받은 type
에 따라 토큰을 다르게 처리한다.