GitHub OAuth 앱의 토큰이 8시간 뒤 만료된다: 리디렉션 설정도 함께 점검할 때
GitHub OAuth 앱에 8시간 액세스 토큰과 6개월 갱신 토큰, 최대 10개 콜백 URI가 도입됐다. 기존 앱의 호환성과 와일드카드 위험을 정리했다.
GitHub가 2026년 8월 14일 OAuth 앱과 GitHub App의 인증 설정을 확대했다. OAuth 앱은 만료되는 액세스 토큰과 갱신 토큰을 선택할 수 있고, 최대 10개의 리디렉션 URI를 등록할 수 있다. 두 앱 유형 모두 리디렉션 URI의 와일드카드 일치를 설정별로 제어할 수 있게 됐다. 새 기능은 GitHub.com에 제공됐으며 GitHub Enterprise Server 3.23에도 포함될 예정이다.
무엇이 바뀌었나
만료형 토큰을 쓰면 액세스 토큰은 발급 후 8시간, 갱신 토큰은 사용하지 않은 상태로 6개월 뒤 만료된다. 액세스 토큰이 끝나기 전에 갱신 토큰을 보내면 새 액세스 토큰과 새 갱신 토큰 쌍을 받는다. 개발자는 인증 요청에 offline_access 범위를 추가해 로그인 한 건부터 시험하거나, 앱 등록 설정에서 새 토큰을 모두 만료형으로 강제할 수 있다.
새 OAuth 앱은 짧은 수명의 토큰이 기본값이다. 다만 설정을 켠다고 이미 발급된 장기 토큰이 자동으로 만료되지는 않는다. 기존 사용자가 다시 로그인해 새 토큰 쌍을 받아야 전환된다. 인증 SDK가 갱신 흐름을 지원하지 않는다면 우선 기본 동작을 끄고 클라이언트를 업데이트해야 한다.
리디렉션 URI는 한 앱에 최대 10개까지 등록할 수 있다. 개발·스테이징·운영 도메인이나 서로 다른 배포 환경을 별도 앱으로 쪼개지 않아도 된다. 각 URI에는 하위 도메인이나 추가 경로를 허용하는 와일드카드 일치를 선택적으로 적용할 수 있다.
개발자에게 왜 중요한가
장기 액세스 토큰이 유출되면 사용자가 취소하기 전까지 악용될 수 있다. 수명을 8시간으로 제한하면 탈취된 토큰의 유효 창을 줄일 수 있다. 반대로 갱신 토큰 보관과 회전 로직이 새 공격 표면이 된다. 갱신 요청이 성공할 때마다 새 쌍을 원자적으로 저장하지 못하면 여러 인스턴스가 동시에 갱신하거나 오래된 토큰으로 재시도하면서 사용자가 갑자기 로그아웃될 수 있다.
여러 콜백 주소 지원은 환경별 운영을 단순화하지만, 와일드카드는 편의와 보안 경계를 동시에 넓힌다. GitHub는 사용자 콘텐츠를 호스팅하거나 경로 통제가 약한 도메인에서 와일드카드가 악용될 수 있다고 경고했다. 인증 코드가 공격자가 제어하는 하위 도메인이나 경로로 전달되면 계정 탈취로 이어질 수 있다.
기존 프로젝트 영향
기존 앱의 현재 토큰이 즉시 무효화되지는 않는다. 그러나 새 앱을 만드는 팀은 만료형 토큰이 기본이므로, 액세스 토큰 문자열 하나를 영구 저장하는 기존 SDK나 데이터 모델이 그대로는 동작하지 않을 수 있다. 액세스 토큰의 만료 시각과 갱신 토큰, 갱신 토큰 만료 시각을 함께 보관하고 재로그인 경로를 마련해야 한다.
GitHub.com과 GitHub Enterprise Server를 함께 지원하는 클라이언트는 버전 차이를 처리해야 한다. 3.23보다 낮은 서버에서는 offline_access가 효과가 없을 수 있으며, 이 경우 갱신 토큰 없이 비만료 액세스 토큰이 돌아올 수 있다. 응답에 갱신 토큰이 항상 있다고 가정하면 안 된다.
리디렉션 설정에서는 기존 단일 URI 앱도 확인이 필요하다. GitHub는 단일 리디렉션 URI만 가진 OAuth 앱과 GitHub App에 과거 호환 동작으로 와일드카드 일치가 켜져 있으며, 이제 설정 화면에서 이를 보고 끌 수 있다고 밝혔다. 필요하지 않다면 명시적으로 비활성화해야 한다.
적용·업데이트 전 확인 사항
- 한 로그인부터 시험한다. 전역 강제 전에
offline_access를 사용해 웹 흐름과 디바이스 흐름의 갱신을 검증한다. - 토큰 교체를 원자적으로 처리한다. 새 액세스·갱신 토큰 쌍이 저장된 뒤에만 이전 값을 폐기하고, 동시 갱신을 잠금이나 단일 작업으로 제어한다.
- 기존 토큰을 별도로 회수한다. 설정 변경만으로 오래된 장기 토큰이 사라지지 않으므로 재로그인 계획과 취소 절차를 마련한다.
- 콜백 URI를 정확히 등록한다. 가능한 한 정확한 스킴·호스트·경로를 쓰고, 개발 환경과 운영 환경의 소유권을 분리한다.
- 와일드카드를 최소화한다. 사용자 생성 하위 도메인, 열린 리디렉션, 임의 경로 라우팅이 있는 도메인에서는 사용하지 않는다.
- 서버 버전을 감지한다. Enterprise Server 3.23 미만에서는 갱신 토큰이 없을 수 있는 응답을 정상 분기로 처리한다.
- 실패 복구를 시험한다. 만료된 갱신 토큰, 토큰 회수, 네트워크 재시도와 다중 인스턴스 경합 때 사용자를 안전하게 다시 인증시킨다.
이번 변경은 OAuth 2.0 규격 자체의 새 버전이 아니라 GitHub 구현의 제공 범위 확대다. 적용의 우선순위는 리디렉션 URI를 늘리는 것보다 기존 앱의 숨은 와일드카드 설정을 먼저 확인하고, 토큰 저장소와 갱신 실패 경로를 갖춘 뒤 수명을 줄이는 데 두는 편이 안전하다.