Java/Spring

Refresh Token, Access Token의 개념 및 동작

mad038 2024. 6. 3. 21:08

▶ 두 토큰의 차이점

Refresh Token

  • 사용자가 서버에 인증하려 만든 토큰이 아니라 데이터 배이스와 연동해 Access Token을 제작할 때 쓰인다.
  • 대체로 만료기간이 매우 길게 설정하며 사용자가 확인할 수 없어 보안에 용의 하다.
  • 사용자가 서버를 이용할 때마다 로그인해야 하나는 수고를 줄이고 보안성을 높이기 위해 만들었다.

AccessToken

  • 사용자가 서버에 인증하기 위해 만든 토큰으로 서버를 이용하기 위해 쓰인다.
  • 만료기간이 Refresh Token보다 짧고 사용자가 확인하려면 할 수 있기에 보안에 취약하다.

 

▶ 만료기간 때문에 분리했는데 만료기간?

만료기간은 왜 있을까?

  • 사용자 PC가 해킹당해 토큰이 털릴 위험성이 있기에 토큰에 만료기간을 정해 토큰이 털려도 시간이 지나면 쓸데없는 데이터 쪼가리가 돼서 악용가능성을 줄이기 위해 만료기간이 필요하다 

Refresh Token를 쓰면 아예 해킹에 절대로 안 당할까?

  • 절대라는 것을 없다. Refresh Token또한 해킹당할 위험이 있다
  • 그래서 Refresh Token을DB에서 체크해 토큰을 새로 만들 때Access Token와 Refresh Token 두 가지를 같이 다시 만드는 것으로 위험성을 더욱 낮출 수 있다.

 

 

▶ 그렇다면 작동 구조는?

  1.  사용자가 회원가입 or 로그인 
    • Refresh Token, Access Token 두 토큰을 생성한다 
      • Refresh Token는 DB에 보관한다
      • Access Token는 사용자 클라이언트( 크롬, 폭스 등등)에 보관
  2. 사용자가 서버를 이용 ( 웹 서핑, 웹 뱅크 등 서비스들 )
    • 서버가 클라이언트의 Access Token를 체크해서 서비스를 할 수 있게 해준다.
    • Access Token의 유효 기간이 끝나면 Refresh Token을   DB에 체크해서 다시 Access Token를 만들어 준다.
  3. Refresh Token 이 만료됐다면?
    • Access Token가 유효하면 다시 Refresh Token 를 만들어준다
    • Access Token가 유효하지 않다면 다시 1번의 로그인을 한다