전제조건 -> [RTR(Refresh Token Rotation] 적용한 상태
- 유저 한명당 하나씩 레디스에 (가장 최근에 발급받은)
refresh token
을 가지고 있는 방식 (로그인, 리이슈시 덮어쓰고 / 로그아웃& 회원탈퇴 시에는 지운다)- 블랙리스트 방식
(로그인시 저장안함 / 리이슈시 발급에 사용한refresh token
을 블랙리스트 등록 / 로그아웃&회원탈퇴 시에는 가져온refresh token
을 블랙리스트에 등록)
어떤 방식이 더 효율적일지 고민해보고 결정해야한다.
- 보안상 허점은 어떤 것들이 있는지
- 어떤 방식이 Redis를 더 효율적으로 사용하는지 (데이터 갯수, 접근 빈도 등)
(일반적인 유저 사이클에서 접근횟수를 각각 체크해보기)
JWT를 쓰는 의의는 세션과 달리
DB에 접근을 최소로 한다
에 있다.
- 아님
access token이나 refresh token 둘 다 DB 접근 없이
돌아가도록 구현하는 것이 맞는 방향이 아닐까?
- access token은 맞는데 refresh token은 jwt로 구현 안하고 UUID같은 값으로 DB에 저장하는 방식을 쓸 수도 있음.
블랙리스트
개념처럼 Redis에 저장하고 혹시 이놈을 들고 오면 혼쭐을 내준다. 이렇게 로직을 짠 이유?
사실 많은 글들에서 로그아웃시블랙리스트
에 ATK를 넣는다.
-> 이거는 사실상 매번 ATK를 사용할 때 마다블랙리스트
랑 대조해보면서 사용한다는 소리인데... (이럴거면 그냥 세션쓰는게..?)
-> 차라리 30분정도의 ATK 보안을 포기하고 RTK로 블랙리스트
를 돌리는게 더 낫지 않나...
docker run -d -p 6379:6379 redis
>> -d(백그라운드 실행) / -p(포트 지정)
https://www.youtube.com/watch?v=Gimv7hroM8A&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC
[Spring Boot와 Redis를 사용하여 Refresh Token 구현하기 - Hudi]
https://hudi.blog/refresh-token/
https://auth0.com/docs/secure/tokens/refresh-tokens/refresh-token-rotation
https://auth0.com/blog/stateless-auth-for-stateful-minds/#The-Benefits-of-Going-Stateless
https://sehajyang.github.io/2019/12/11/how-to-operate-redis/
https://jistol.github.io/docker/2017/09/01/docker-redis/
https://jinane.tistory.com/21
https://hub.docker.com/_/redis