Skip to content

[BE] accessToken 갱신 수단 부재 #508

Description

@sumi-0011

증상

로그인한 지 7일이 지나면 웹에서 모든 API 호출이 401을 받습니다. 사용자는 로그인 상태로
보이는데 아무 기능도 동작하지 않고, 이슈 #506 제보자는 이 때문에 시크릿 모드로 우회해서
샵을 쓰고 있었습니다.

발견 배경

  1. 깃허브에서 바로가기 및 1만 p 뽑기가 안돼요 #506 의 "깃허브에서 링크 눌러 들어오면 클라이언트 오류" 제보를 재현하려고 프로덕션
    접속 → 랜딩·샵·마이페이지 전부 동일하게 깨짐
  2. /api/auth/session 확인 → 세션은 살아 있는데 그 안의 accessToken 만 만료

측정

같은 세션 안의 두 만료 시각입니다.

항목 발급 만료 수명
백엔드 accessToken 2026-07-27 2026-08-03 7일
NextAuth 세션 2026-09-02 2026-10-02 30일 (롤링 갱신)

관측 시점 2026-09-02 기준 백엔드 토큰은 30일 전에 만료된 상태였고, 그 토큰으로
GET /users 는 401 {"message":"Authorization fail"} 을 반환했습니다.

원인

로그인 시 받은 토큰 외에 갱신 수단이 없습니다. 프론트는 만료된 토큰을 그대로 재사용하고,
세션 쿠키는 자체 수명대로 30일간 갱신됩니다. 백엔드는 세션 쿠키 수명을 모르고, 프론트는
토큰의 만료 시각을 검사하지 않습니다.

해결 방향

두 가지가 있고 아래쪽이 가볍습니다.

  • refresh token 발급과 갱신 엔드포인트를 추가한다. 사용자가 7일마다 다시 로그인하지
    않아도 되므로 근본적이지만 작업량이 큽니다.
  • accessToken 수명을 세션 수명(30일)에 맞춘다. 재로그인 주기 문제는 남지만 세션이
    유효한 동안에는 토큰도 유효합니다.

프론트에서는 만료된 토큰을 감지하면 세션을 함께 만료시켜 로그인 화면으로 보내도록
별도 수정 중입니다. 다만 그건 7일마다 재로그인을 강제하는 것이라, 위 둘 중 하나가
있어야 제대로 해결됩니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions