현재 앱에서 accessToken 하나만 있다면 이것을 가지고 계속 권한이 필요한 요청을 보낼 수가 있습니다.

로그인을 한번 더 해서 다른 토큰을 받고 그 이전에 토큰을 이용해도 아직 유효합니다.

처음 받은 토큰

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiIsImlhdCI6MTY3NDQ1MTE2Mn0.

다시 로그인해서 받은 토큰

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiIsImlhdCI6MTY3NDQ1MjQ0NH0.Z

처음 받은 토큰을 이용해서 요청을 보냄 → 아직 유효.

이렇게 되면 하나의 토큰을 탈취 되면 탈취한 토큰으로 계속 요청을 보내게 될 수 있습니다.

이걸 위해서 토큰의 유효시간을 줄일 수 있습니다.

유효시간을 너무 짧게 하면 ====> 자동으로 로그아웃 되어 너무 자주 로그인을 다시 해야 합니다.

유효시간을 너무 길게 하면 ====> 토큰에 유효시간을 주는 이유가 사라지게 됩니다. 토큰이 탈취 되면 긴 유효시간이 끝날 때 까지 계속 탈취당한 토큰을 사용 가능하게 됩니다.

RefreshToken

위와 같은 문제점을 보완하기 위해서 refreshToken을 사용하게 됩니다.  refreshToken도 accessToken 처럼 jwt를 이용해서 발급 가능 하며, 주로 accessToken의 유효시간은 짧게 해주며 refreshToken의 유효시간은 길게 해줍니다. 그래서 accessToken의 유효시간이 다 지나면 refreshToken을 이용해서 새로운 accessToken을 발급.

accessToken Access Token은 리소스에 접근하기 위해서 사용되는 토큰입니다.
refreshToken Refresh Token은 기존에 클라이언트가 가지고 있던 Access Token이 만료되었을 때 Access Token을 새로 발급받기 위해 사용합니다.

AccessToken + RefreshToken Flow

Untitled

만들 던 앱에 RefreshToken 추가하기

Untitled

로그인시에 refreshToken도 생성