웹개발

Access token & Refresh token 파헤치기

작취 2023. 12. 26. 21:23
반응형

Access token 과 Refresh token 에 대해 공부를 하려면 우선 JWT의 개념부터 명확하게 잡고가야한다.

 

JWT(access token)란?

JWT는 Json Web Token의 약자로 말 그대로 웹에서 사용하는 JSON형식의 토큰에 대한 표준 규격을 말한다.

주로 사용자의 인증 정보를 서버와 클라이언트간에 안전하게 주고받기 위해 사용하는데 구조와 장점 단점만 빠르게 짚고 넘어가보자

  • 구조
    • header.payload.signature의 구조로 이루어져 있음
    • 각 부분은 .(dot)으로 구분되어있음
    • header: 알고리즘과 토큰의 타입이 명시되어있음
    • payload: 전달하려는 데이터(claim)를 포함하고 있음
    • signature: header와 payload의 비밀키를 담고있음
    • base64로 인코딩되어있음
  • 장점
    • 데이터 위변조를 막을 수 있다
    • 세션과 달리 인증정보에 대한 별도의 저장소가 필요없다
    • 토큰에 대한 정보를 자체적으로 지니고있어 다른 시스템에서 접근 및 공유가 용이하다
    • 쿠키를 사용하지 않으므로 CORS문제에서 자유로워 질 수 있다
  • 단점
    • 토큰의 길이가 길어 인증요청이 많아질수록 서버에 부하가 걸릴 수 있다
    • 토큰을 탈취당하면 대처하기 어렵다(보안이 취약함)

 JWT의 구조와 장단점을 알아보았으니 단점을 보완할 수 있는 Access token 과 Refresh token에 대해서 공부해보자


Refresh token이란?

JWT(access token)을 통한 인증방식의 문제는 위에서 말했듯이 토큰이 탈취당했을 때 대처가 어렵다는 점이다.

이를 해결하기 위해서는 token의 유효기간을 짧게 만들어서 사용해야하는데

이러면 사용자가 로그인을 자주해야한다는 단점이 또 생기게 된다.

 

그래서 등장한 방법이 유효기간을 짧게 하면서 사용자를 귀찮게 하지 않게하는 Refresh token방식이다.

Refresh token은 Access token과 똑같은 형태의 JWT인데 유효기간을 아주 길게 설정해둔다는 차이가 있다. 작동 방식은 아래에서 더 자세히 알아보자


Access token/Refresh token 작동 원리

 

  1. 유저가 로그인 시도를 함
  2. 서버가 DB에서 유저에 대한 정보를 가져옴
  3. 로그인 완료 / Access token(유효기간 10분), Refresh token(유효기간 2주) 발급 >> 유효기간은 설정하기에 따라 다름
  4. Refresh token DB에 저장 
  5. 사용자는 Access token을 헤더에 실어서 원하는 데이터를 요청하고 받아올 수 있다.
  6. Access token 만료됨
  7. 사용자는 Refresh token과 Access token을 함께 서버로 보내면서 데이터 요청을 함
  8. 서버는 사용자가 보낸 Refresh token과 DB에 저장되어있는 Refresh token을 비교
  9. Refresh token이 동일하고 유효기간이 지나지 않았다면 새로운 Access token 발급
  10. 서버는 새로운 Access token을 헤더에 실어 API 요청 진행

이렇게 하면 기존방식보다 안전하게 데이터를 주고받을 수 있다.

하지만 구현이 복잡해지고 새롭게 token을 발급하는 과정에서 자원이 많이 소모될 수 있다는 단점이 있다.

반응형