JWT
- 유저를 인증하고 식별하기 위한 토큰이다. 토큰은 세션과 달리 서버가 아닌 클라이언트에 저장된다
Access Token ?
- 이용자가 로그인 시도
- 서버에서 이용자를 확인하고 토큰을 발급하는데 JWT토큰 인증정보를 payload에 할당하고 생성
- 생성한 토큰을 클라이언트에 반환해주고 클라이언트가 이 토큰을 가지고 있는다
- 클라이언트에서 권한을 인증 요청할때 이 토큰을 같이 보낸다
- 서버는 토큰을 확인하고 payload의 인코딩되어 있는 값을 디코딩해서 사용자의 권한을 확인하고 데이터를 반환
- 토큰이 정상적인지 확인
- 시간이 지난 토큰이면 새로 로그인(토큰 재발급)
Refresh Token?
Access Token만 쓰면 인증보안에 취약할 수 있고 다른사람이 악의적으로 토큰을 취득하면 토큰의 유효기간이 끝나기 전까지 막을 수 없다
Access Token의 유효기간을 짧게 설정하면 로그인을 자주 해야하는 문제가 생기는데 이는 사용자가 이용하기 귀찮을 수 있다
이 부분을 Refresh Token으로 해결할 수 있다.
Refresh Token과 Access Token은 둘다 JWT토큰이고 Refresh Token은 유효기간을 길게주고 Access Token이 유효기간이 끝났을 때 발급해주는 역할만 한다
보통 Access Token의 유효기간을 30분만 주면 Refresh Token의 유효기간을 하루 주고 Access Token의 유효기간이 끝나면 Refresh Token의 유효기간을 확인한 후 Access Token을 재발급 해준다.
Access Token 과 Refresh Token
- 이용자가 로그인
- 서버에서 사용자를 확인하고 토큰 정보를 payload에 할당해서 생성
- Refresh Token도 생성해서 서버에 저장하고 두 토큰 모두 클라이언트에 반환
- 클라이언트도 두 토큰 모두 저장
- 클라이언트가 권한인증이 필요해 요청하면 Access Token을 전달해서 요청
- 서버는 전달받은 토큰을 확인하고 payload의 인코딩된 값을 디코딩해서 사용자의 권한을 확인
- 토큰이 정상적인지 확인
- 시간이 지난 토큰이면 새로 로그인시켜 토큰을 발급
- 서버는 Access Token과 Refresh Token을 확인하고 Refresh Token이 만료되지 않으며 새로운 Access Token을 발급해 클라이언트에 전달
Access Token의 유효기간이 짧은 이유
- 해커가 악의적으로 Access Token을 얻었을 때 로그인이 이미 되어있는 상태라 막기가 힘들어 Access Token의 유효기간을 짧게 하고 Refresh Token의 유효기간을 길게해서 Refresh Token을 다시 확인시켜 사용자가 로그인을 자주하는 불편한을 보완해준다 또한 Refresh Token으로 악의적으로 탈취된 Access Token을 갱신해준느 역할도 한다