Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] 리프레시 토큰 적용 #60

Closed
6 tasks done
yooookm opened this issue Oct 22, 2024 · 0 comments · Fixed by #61
Closed
6 tasks done

[Feature] 리프레시 토큰 적용 #60

yooookm opened this issue Oct 22, 2024 · 0 comments · Fixed by #61
Assignees
Labels
🎉 feature 새로운 기능 구현 및 개선사항

Comments

@yooookm
Copy link
Collaborator

yooookm commented Oct 22, 2024

📝 이슈 설명

리프레시 토큰 적용했습니다~!
리프레시 토큰을 이용할 땐 보안을 위해 토큰 검증 로직이 필수입니다.
그래서 저는 RTR과 블랙리스트 검증 로직을 추가했습니다~!

RTR(Refresh Token Rotation)

동작 원리

  1. 사용자가 처음 로그인 할 때, 액세스 토큰 + 리프레시 토큰 발급
  2. 액세스 토큰이 만료되면, 사용자는 기존 리프레시 토큰을 사용하여 새 액세스 토큰을 요청함
  3. 서버가 새 액세스 토큰과 함께 새로운 리프레시 토큰을 발급함. 동시에 기존 리프레시 토큰은 폐기.

한계

해커가 리프레시 토큰을 탈취한 상태에서 사용자보다 먼저 액세스 토큰을 요청했다면?
사용자가 AT를 재발급 받으려 해도 (정상이었던)Refresh Token이 Redis에 존재하지 않기 때문에 재발급을 받을 수 없다.
선수를 뺏길 때 문제가 발생하는 것이다.

내가 보완한 방법

만료된 리프레시 토큰으로 요청이 들어오면 기존 리프레시 토큰을 삭제하여 로그아웃 처리를 한다.
이렇게 하면 해커가 사용자보다 먼저 액세스 토큰을 요청하더라도, 정상 사용자는 로그인만 다시 하면 문제 없이 토큰을 발급받을 수 있음.
또한, 해커가 가진 리프레시 토큰도 만료시켜 더 이상 사용할 수 없게 된다.

신경 쓰이는 점

레디스에 데이터를 업데이트하는 횟수가 많아져서 서버 비용이 많이 나올 수도 있다..

참고 1
참고 2

블랙리스트

문제 상황

현재는 로그아웃 시 리프레시 토큰만 삭제되지만, 액세스 토큰은 남아있음.
이로 인해 유효 기간 내에 로그아웃한 사용자도 계속 액세스할 수 있는 보안 문제가 발생할 가능성 有

동작 방식(보완 방법)

  • 로그아웃 시 액세스 토큰을 Redis 블랙리스트에 등록
  • 액세스 토큰의 남은 만료 시간 동안만 Redis에 블랙리스트로 저장
  • 이후 요청이 들어올 때마다 해당 토큰이 블랙리스트에 포함되어 있는지 확인하여 차단

☑️ TODO

리프레시 토큰

  • 리프레시 토큰 발급 구현

RTR

  • 액세스 토큰 발급 시 리프레시 토큰도 함께 재발급
  • 로그인 시 userName - refresh token으로 레디스에 저장
  • 만료된 refresh token으로 요청이 왔을 때, 기존 refresh Token 삭제

블랙리스트

  • 로그아웃 시 액세스 토큰을 블랙리스트로 등록
  • 로그인 요청 시 해당 액세스 토큰이 블랙리스트에 등록되었는지 확인
@yooookm yooookm added the 🎉 feature 새로운 기능 구현 및 개선사항 label Oct 22, 2024
@yooookm yooookm self-assigned this Oct 22, 2024
@yooookm yooookm changed the title [고민] Jwt 토큰 RTR 적용 [Feature] 리프레시 토큰 적용 Oct 22, 2024
@hyyyh0x hyyyh0x linked a pull request Oct 29, 2024 that will close this issue
@pykido pykido closed this as completed Nov 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🎉 feature 새로운 기능 구현 및 개선사항
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants