BFF 인증 안정화: access 만료 후에도 refresh 만료 전 로그인이 유지되도록 만든 실제 수정 기록

#authentication#BFF#JWT#NextJS#token-refresh

이번  로그 유지  기는 문제였다. 증 했다. 잠  페이지 이동하면 /api/bff/auth/me 401 발생하고, 브라우  면서 로그 상태 되어렸다. 그런데 DB 보면 revoked_at  있어  살아있는 경우 있었다. 즉, 백   /BFF 에서 먼저    존재했다.   인트 BFF 401 - refresh - retry 인이었다. 여기 실제 문제가   있는  여러  있었다.


9f595a5a-b6b7-4022-9c59-5bc336dc60af.png


1) refresh 성공 에서 access token   았다.

에는 refresh body accessToken/access_token 봤. 하지만 환경 따라 body 아니라 Set-Cookie 내려오는 경우 있다. 이 retry 토 못 잡으면 원 요청 재도가 실패하고, 결과적으로 사용자는 로그처럼 보인다.그래 토 추 body, body.data, Set-Cookie까지 확했다.


2) refresh 호출 시 헤 전달 불했다.

refresh 쿠 기반이어 가장 안전, 기존 Authorization 따라 예 케이스 만들 수 있다.refresh 호출에서 Content-Type: application/json 명하고, 불 incoming Authorization 전달 차했다.


3) refresh 실패 시 쿠 삭제 조건 과했다.

 큰 문제였다. 장애(타/5xx)도 401처럼 처리 쿠 바로 삭제 수 있다.그래  토 무 때 삭제하도록 바.: refresh_missing, refresh_invalid, refresh_expired, invalid_token 같은 명 코드 때 삭제.


4) refresh 실패 상태드를 401로 뭉 않도록 수정했다.

에는 실패 거의 401로 반환 프 즉 로그 분기로 빠 쉬. upstream 상태(예: 500/504)를 그대로 전달  장애 vs 인증 만 구 수 있게 했다. 권 반 지 이 같이 정했다.getUserRole()에서 access 쿠 선사를 제거하고 항상 /auth/me 호출하게 바. 이 access 비 있어 refresh 트 수 있다. 인증 UI route 변경/포 복/visibility 변경 시 재하게 수정했다. 로그인/로그 직 router.refresh() 서버 상태 즉 반하도록 했다.이번 정 결 단했다.로그 유지 토 저장 위치 문제가 아니라, 실패 케이스 분 상태 전달, 쿠 삭제 타 같은 계약(Contract) 문제. BFF 구조에서는 refresh 실패 섣 로그으로 단하면 정상 세까지 끊 수 있다.으로 원 동일하다:

  • refresh 성공  ,
  •  삭제 하게,
  •  장애 인증  해서 처리하기.

25

댓글