refresh token과 access token에 대해 정리해보겠습니다
통합 로그인 프로젝트를 진행할 때 JWT, refresh token, access token 등의 개념을 처음 접하였는데,
이 개념들을 간단하게 정리하고자 한다.
📌 JWT ?
: JWT는 JSON Web Token의 약자이다.
정보를 JSON object로 안전하게 전송하는 방법이다.
JWT는 일반적으로 웹 애플리케이션에서 인증 및 권한 부여 목적으로 사용된다.
즉, 유저가 로그인할 때 서버가 인증 정보를 보내주는데,
암호화나 시그니처 추가가 가능한 데이터 패키지(=JWT) 안에 인증 정보를 담아서 보내준다.
담기는 정보 중 refresh token과 access token이 유저 인증에 사용된다.
📌 refresh token & access token
먼저 refresh token은 access token의 유효 기간이 만료됐을 때 새롭게 발급해주는 역할을 한다.
refresh token은 서버에 저장되므로(*stateful) 탈취 당했다고 판단되면 서버에서 refresh token을 삭제함으로써 강제 로그아웃을 시킬 수 있다.
access token은 서버에 저장되지 않으므로(*statless) 탈취되면 서버에서는 막을 방법이 없어 보안 취약성이 존재한다.
따라서 access token은 짧은 시간 안에 만료되는 구조로,
refresh token은 처리 비용이 많이 들기 때문에 2주 정도 유지할 수 있는 구조로 가져가는 방식을 주로 사용한다.
*stateful(=상태유지) : 클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존함
*statless(=무상태) : 클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미
📌 로그인이 이루어지는 과정
- 유저가 로그인 한다.
- 서버가 JWT에 인증 정보를 담아 보내준다.
- 정보 중 refresh token과 access token을 클라이언트에 저장해둔다.
- 클라이언트는 API 요청 시 Authorization 헤더에 access token을 포함시켜 보낸다.
- access token 만료 에러 발생 시, 클라이언트에 저장된 refresh token을 사용해 새로운 access token을 요청한다.
- 서버는 유효한 refresh token 인지 검증 후 새로운 access token을 발급한다.
회사에서 진행했던 통합 로그인 페이지에서는..
- 서버에 refresh token을 쿠키를 통해 전송한다. (GET /refresh-token)
- access token을 받아서 localStrage에 저장한다.
- 로그인이 필요한 페이지에 접속할 때 access token 유효성을 검사한다.
참고 :
https://steadily-worked.tistory.com/469
https://velog.io/@yaytomato/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0
'배움 기록 > ETC' 카테고리의 다른 글
[TS] IndexedDB 공통 유틸: 구현과 사용법 (+ 기본 개념) (0) | 2024.07.28 |
---|---|
React-Query 를 사용하는 이유(+ 개념, 컨셉, SSR Hydration, Redux ...) (0) | 2023.10.09 |
[MongoDB] Next.js 에서 MongoDB 사용하기 (+ Dynamic Route 에서 DB 데이터 사용하는 법) (0) | 2023.09.12 |
[Axios] Axios Interceptors 사용법 (0) | 2023.07.29 |
댓글