Access Token & Refresh Token

HSKwon·2023년 4월 28일
2
post-thumbnail

Access Token & Refresh Token

우선, Access Token과 Refresh Token은 JWT(Json Web Token) 방식의 보안 강화 방식이다. JWT 토큰에 대한 설명 참고

Refresh Token이 필요한 이유

Access Token만을 통한 인증 방식의 문제는 만약 토큰이 탈취될 경우 보안에 취약하다는 점이다. Access Token이 발급된 이후에는 서버에 저장되는게 아니고, 토큰을 탈취한 사람은 누구나 권한 접근이 가능해 진다. 따라서 Access Token만을 이용한다면 보안에 매우 취약해 질 수 있다.

Access Token의 유효기간을 짧게 하면 해결되는 것 아니야?

Access Token의 유효기간을 짧게 한다면 토큰의 탈취를 방지하는데 어느정도 일조할 수 있겠지만, 토큰이 자주 만료되기 때문에 사용자 입장에서는 자주 로그인을 해줘야 하는 불편을 감수해야만 한다. 따라서 UX가 나빠질 수 있다. 반대로 무턱대고 UX를 위해 토큰의 유효기간을 길게하면 그만큼 토큰 탈취의 가능성이 높아져 보안 측면에서 악영향을 미칠 수 있다.

✅ 유효기간을 짧게해 보안을 높이면서 UX까지 고려하기 위한 해답으로 Refresh Token이 등장했다.

토큰 검증 과정

  1. 사용자가 로그인을 하면 서버에서 Access TokenRefresh Token을 발급해서 클라이언트단으로 보내준다.

  2. 서버는 추후 클라이언트단에서 헤더에 Refresh Token을 담아 요청할때 검증할 목적으로 Refresh Token을 DB에 저장한다.

  3. 클라이언트쪽에서는 Access Token과 Refresh Token을 웹 스토리지에 저장한다. (대개 Access Token은 local storage, 쿠키 혹은 recoil 등의 전역 상태관리 라이브러리에 저장하고, Refresh Token은 쿠키에 저장한다.)

  4. 이후 사용자가 만료된 Access Token을 보내면 서버는 Unauthorized 응답을 보낸다. 이때 Refresh Token을 함께 서버로 보내는데, 서버는 받은 Refresh Token과 DB에 저장된 Refresh Token을 비교하여 이 두 토큰이 동일하고 유효기간도 지나지 않았다면 새로운 Access Token을 발급해준다. 서버는 새로운 Access Token을 헤더에 실어서 API 요청에 대한 응답(response)을 진행한다.

GraphQL에서 Refresh Token을 이용해서 Access Token을 재발급하는 과정

profile
공부한 내용이나 관심 있는 정보를 글로 정리하며 익숙하게 만들고자 합니다.

0개의 댓글