skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

jwt 리프레시 토큰 사용이유 #110

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

jwt 사용 이유

jwt 토큰을 활용하는 가장 큰 이유는 stateless
예를들어 세션을 활용하여 로그인 정보를 다룬다면 stateful한 상황으로 하나의 요청은 하나의 서버에서만 대응할 수 있다.
이를 극복하고자 stateless한 jwt를 통해 어떤 서버에서든 요청을 처리할 수 있다.

refresh token 사용이유

stateless하기 때문에 어떤 서버에서든 대응할 수 있다.
그러나 반대로 생각해보면 다른 서버에선 이 요청자가 본인이 맞는지 확신할 수 있을까??

이에 대한 대책으로 리프레시 토큰을 사용한다
1. access token의 유효기간을 짧게 가져간다.
2. refresh token의 유효기간을 좀 더 길게 가져간다
3. 사용자는 access, refresh token을 둘 다 전송하고 Access token만료시 refresh token을 통해 새로 발급받는다
4. 따라서 도중에 access token을 탈취당하더라도 해당 access token만으로는 유효시간이 지나면 더 이상 사용할 수 없다

만약 refresh token이 탈취당했다면?

1. 공격자가 refresh token을 탈취하여 새로운 access token을 발급받으려한다.
2. 그럼 서버는 해당 refresh token을 통해 access token을 만들고 전달받은 access token과 비교
3. 만약 전달받은 access token과 refresh token을 통해 만든 access token이 다르며 기존 access token의 유효시간이 만료되지 
않았다면 이는 refresh token을 탈취당했다고 가정하여 access, refresh 모두 파기
4. 이 경우 원래 주인은 다시 로그인을 해야하는 불편한점이 있을 수 있지만 적어도 공격자는 토큰을 사용할 수 없다.