TIL230923(토)_ refreshToken 리프레시토큰 저장

박지은·2023년 9월 22일
0

TIL

목록 보기
29/36

1. 리프레시 토큰을 서버에 저장하는 방식

1-1. 데이터베이스에 저장
: 이 방식은 안전하며 사용자마다 고유한 리프레시 토큰을 발급하고 관리하는 데 사용됨. 리프레시 토큰이 사용될 때마다 데이터베이스에서 해당 토큰을 검색하여 검증함.
👉 이번 알파프로젝트에서는 리프레시 토큰을 MySQL 데이터베이스 에 저장함. prisma를 사용해서

// 리프레시토큰을 DB에서 조회
prisma.users.findUnique() 메서드

const userId = decodedToken.userId;

      const user = await prisma.users.findUnique({
        where: { userId: +userId },
        select: { refreshToken: true },
      });

👉 이렇게 db에 저장된 리프레시토큰과 클라이언트에서 제공된 리프레시 토큰이 일치하는지 확인해서 리프레시 토큰의 유효성을 검증한다.

1-2. 메모리에 저장(ex. 캐시서버)
: 이 방식은 빠르게 액세스할 수 있지만, 서버가 재시작되거나 다운되면 리프레시 토큰 정보가 손실될 수 있음. 이 방식은 고사용성을 가진 캐시시스템(ex.Redis)을 사용할 때 특히 유용함

👉 어떤 식으로 데이터를 저장할 지를 고민해보는 것도 중요한 일, 지금 프로젝트의 규모가 작고 접속자 수도 작은 상태에서 MySQL을 사용하는 것만드로도 충분히 가능하다고 생각해서 이번에는 1-1 방식으로 진행해보려고 한다.

2. 리프레시 토큰

2-1. 엑세스 토큰의 한계점

  1. 잦은 로그아웃
    엑세스 토큰을 단독으로 사용하면 재발급 시 로그인을 해야합니다.
    때문에 만료시간을 짧게 하면 재로그인을 자주 해야하며, 만료시간을 길게하면 아래와 같은 보안 문제가 발생합니다.
  2. 보안 문제
    Access Token의 만료 시간을 길게하면 탈취 당했을 때 유저의 모든 권한을 탈취자가 가지게 됩니다.
    토큰은 state-less 구조로 state의 주도권을 서버가 가지고 있지 않습니다.
    때문에 탈취 당했다고 하더라도 토큰 자체를 파기할 수 없습니다.(이는 비용적으로는 장점이지만, 보안적으로는 단점입니다.)

2-2. Refresh Token이란?

Refresh Token은 Access Token의 문제점을 방지하기 위하여 생겨났습니다.

  • 잦은 로그아웃
    Refresh Token을 사용하여 Access Token을 갱신하여 재로그인 주기를 늘릴 수 있습니다.
  • 보안 문제
    Access Token의 만료시간을 짧게 함으로써 탈취 시 문제를 조금이나마 방지할 수 있습니다
profile
성장하는뿅아리

0개의 댓글

관련 채용 정보