JWT 동작 방식이 자꾸 헷갈려서 조금 더 조사하여 이해한 바를 아래와 같이 작성합니다.
프론트에서 인가 요청을 하면 백앤드에서 유효한 경우 JWT을 발급합니다. JWT는 access_token과 refresh_token이 있습니다. 두 토큰 다 유효기간이 존재하고, access_token의 유효기간이 refresh_token 보다 짧습니다.
access_token과 refresh_token은 둘다 탈취될 가능성이 있습니다. 둘다 탈취가 가능한데, 토큰을 두개로 관리하는 게 보안적으로 이점이 있는지에 대해서 궁금했었습니다. access_token은 인가가 필요할 때마다 백앤드에게 요청해야합니다.
refresh_token은 access_token이 유효하지 않을 경우, access_token을 새로 발급할 때 백앤드에게 요청합니다. 요청하는 횟수로 봤을 때, 당연하게도 access_token이 refresh_token 보다 상대적으로 많이 요청되기 때문에 access_token은 refresh_token보다 탈취될 가능성이 높습니다. 그래서 단일 토큰으로 관리할 경우에는 보안적으로 두개로 관리하는 것보다 약합니다.
refresh_token은 디비에서 관리될 수 있습니다. 로그아웃 같은 동작을 할 경우, 해당 토큰값은 디비에서 무효한 상태로 업데이트 하여, access_token과 refresh_token 둘다 무효화 시킬 수 있습니다.