토큰기반은 유저의 상태를 토큰에 담아놓고 서버들은 stateless하게 가자라는 이론이 담긴 기법임
이 토큰에다가 유저의 상태값을 다 넣음
이걸 기반으로 유저가 유효한지아닌지를 확인
어떻게 구현하냐면
MSA기반으로 설명
장바구니, 결제 서버가 있다
토큰을 관리하는 서버도 한대 존재
나머지 서버들은 토큰에대한 어떤 로직도 없음
보통은 이렇게함
근데 토큰 서버를 따로 두지 않고 다른 도메인을 처리하는 서버에 합쳐서 구축할 경우에
그 도메인에서 에러가 발생할 경우 인증에 관한 기능이 마비가 되고 이는 다른 도메인의 기능이 연쇄적으로 마비가 될 가능성이 있다.
토큰이 어떻게 생성되는가
1. 유저가 올바른 패스워드를 입력하면 토큰을 관리하는 authorization server에서 토큰을 줌
2. 그 토큰을 기반으로 사용자가 요청을 할 때 access토큰을 http header-authorization 또는 http header-cookie에 담아 인증이 필요한 서버에 요청해 원하는 컨텐츠를 가져옴
JWT란?
JWT 장점
JWT 단점
토큰기반인증방식을 구현할 땐 refresh토큰과 access토큰 두 개를 기반으로 구현한다.
access토큰의 수명은 짧게 - 헤더에
refresh토큰의 수명은 길게 - 데이터베이스나 Redis에 저장
refresh토큰이란?
그 다음 access토큰이 만료되거나 사용자가 새로고침을 할 때 refresh토큰을 기반으로 새로운 access토큰을 얻는다.
access 토큰 -> 인증을 위한 토큰
해커가 이걸 탈취하면 안되니까 만료기한을 작게 해야함
만료기한이 작으면 로그인을 여러번 해야한다는 단점이 생기잖아
서비스 이용하기 싫어짐
이걸 해결하기위해 refresh 토큰과 같이 씀
refresh 토큰은 만료기한이 큼. 이걸 기반으로 access토큰을 발급 받음
이렇게 하면 토큰기반인증방식의 장점을 취하면서 access토큰의 만료기한이 줄어드는것까지 보완하는 방식이 된다.
주의해야할 점