안녕하세요.
오늘은 Redis를 이용한 AccessToken과 RefreshToken 관리 방법에 대해 정리하려고합니다.

[기존의 제가 사용하던 방식]

유저가 로그인을 하는 경우
AccessToken은 Response로 Client (Front or Android...) 에게 전달
RefreshToken은 Redis에 저장

이렇게 한 이유
"RefreshToken이 RDB(MySQL, ...) 에 저장되면 Session과 뭐가 다른게 있을까?" 생각 때문이었습니다.
만약, RefreshToken이 RDB에 저장되는 경우
AccessToken이 만료가 되는 경우, RefreshToken을 DB에 접근을 하면서 DB자원을 사용하는 것이 마음에 들지 않아...
Redis를 사용하였습니다.

고치게 된 이유
정리를 하는 중에, 이 방식도 보안적으로 문제가 있다고 생각이 들었습니다.
이 주제로 고민과 주변 개발자분들에게 조언을 얻어...



[새로운 방식]

유저가 로그인을 하는 경우
AccessToken은 Response로 Client (Front or Android...) 에게 전달.
AccessToken은 Redis에 저장.
RefreshToken은 암호화하여 RDB에 저장.
만약, AccessToken이 만료되는 경우
RefreshToken은 RDB에서 조회 유효한지 확인.
RefreshToken이 사용되면 새로운 RefreshToken이 발급되어 RDB에 저장.

이렇게 한 이유
기존 사용하던 방식보다는 안전한 방식이라고 생각이 들었습니다.


간략하게 정리...

AccessToken, RefreshToken 란?

AccessToken (액세스 토큰) 
- 역할 : 사용자가 인증된 후 서비스에 접근할 때 사용되는 토큰.
- 수명 : 보통 짧은 수명을 가지며, 특정 시간이 지나면 만료됩니다.
- 획득 방법 : 사용자가 로그인하면 서버에서 발급되고, 이를 클라이언트가 HTTP 헤더 등에 실어서 API 요청 시 함께 보내어 인증함.

RefreshToken(리프레시 토큰)
- 역할 : AccessToken이 만료되었을 때 새로운 AccessToken을 발급받을 수 있는 권한을 부여하는 토큰.
- 수명 : AccessToken보다 상대적으로 긴 수명을 가지며, 안전한 방식으로 저장되어야함.
- 획득 방법 : 사용자가 로그인 시 함께 발급되며, AccessToken이 만료되었을 때 서버에 보내져 새로운 AccessToken을 받음.

Redis 란?

Redis
- 역할 : 데이터를 캐싱하고 저장하기 위한 오픈 소스 인메모리 데이터 구조 저장소임.
- 활용 : 토큰, 세션, 캐시 등을 저장하는 데 사용됨.
- 특징 : 빠른 속도와 메모리 기반이기 때문에 인증 토큰을 안전하게 저장하고 빠르게 검색할 수 있는 용도로 활용됨.

+ Recent posts