사후 보고서: 예기치 않은 JWT `iss` 변경
2024-03-18 예기치 않은 JWT `iss` 변경에 대한 사고 보고서입니다.
요약
2024-03-18에 Logto Cloud에서 JWT 발행자 동작을 변경하는 업데이트가 사용자 지정 도메인 및 iss 유효성 검사를 사용하는 사용자들에게 인증 흐름을 중단시켰습니다. 수정은 이러한 사용자들이 유효성 검사 로직을 업데이트해야 했습니다.
- 영향을 받은 사용자: 사용자 지정 도메인이 활성화되었고
iss
유효성 검사를 수행하는 사용자들. - 심각성: 중요, 인증 흐름 내
iss
유효성 검사 중단.
근본 원인
업데이트는 iss
필드를 요청된 도메인에 맞추어 변경하여, 이전 기본 발행자를 기대했던 기존 유효성 검사를 중단시켰습니다.
타임라인
- 2024-03-18 10:00 (UTC):
iss
동작 변경 업데이트 배포. - 2024-03-18 23:30 (UTC): 기존 동작 중단에 대한 첫 사용자 보고 수신.
- 2024-03-19 12:00 (UTC): 문제 확인 및 조사 시작.
- 2024-03-19 14:00 (UTC): 근본 원인 및 영향 식별.
- 2024-03-20 20:00 (UTC): 영향을 받은 사용자에게 보낼 이메일 준비.
- 2024-03-20 06:00 (UTC): 영향을 받은 모든 사용자에게 이메일 전송.
영향 분석
릴리스 세부 사항
Logto Cloud는 인증을 위한 사용자 지정 도메 인을 지원합니다. 사용자 지정 도메인 활성 테넌트를 사용하는 개발자는 SDK에서 엔드포인트를 사용자 지정 도메인으로 설정할 수 있으며, 최종 사용자는 이 엔드포인트를 사용하여 인증 프로세스를 시작하고 토큰을 얻습니다. 일부 토큰은 JWT 형식으로, 이에는 이 토큰의 발행자를 나타내는 iss
필드가 포함되어 있습니다. 이전에는 사용자 지정 도메인 엔드포인트를 사용하여 액세스 토큰을 요청하더라도 발행자는 여전히 우리의 표준 도메인([tenant-id].logto.app
)으로 기본 설정되었습니다.
하지만 발행자의 도메인은 요청된 엔드포인트와 같아야 합니다. 따라서 우리는 이 문제를 해결하기 위한 업데이트를 릴리스하였고 이제 iss
필드는 요청에 사용된 도메인을 자동으로 반영합니다.
이미 사용자 지정 도메인을 사용하여 토큰을 발급하고 리소스 서버에서 iss
필드 유효성 검사를 구현한 경우, 이것은 중단 변경이 될 수 있습니다. 발행자 변경 때문에 기존 인증 검사가 실패합니다. 이를 해결하기 위해, 개발자는 유효성 검사 코드를 변경하고 기대했던 발행자를 사용자 지정 도메인을 사용한 새로운 발행자로 대체해야 합니다.
우리는 기존 iss
유효성 검사에 대한 영향을 충분히 고려하지 못했으며, 그 결과 이 릴리스는 사전 고지 없이 중단 변경이 되었습니다.
해결
영향을 받은 사용자에게 이메일로 알리고, 요청된 도메인과 일치하도록 iss
유효성 검사를 업데이트하도록 권장했습니다.
롤백?
발행자 필드에 대한 변경은 필요한 수정이며, 일부 사용자는 이미 새로운 동작에 적응했을 것입니다. 롤백은 혼란과 일관성 부족을 초래할 것입니다.
교훈
- 핵심 인증에 영향을 미치는 코드 변경은 정기 검토 외에도 팀의 승인을 받아야 합니다.
- 자동 테스트는 특히 클라우드 전용 시나리오에서 더 많은 사례를 다루어야 합니다.
시정 및 예방 조치
- 통합 테스트 추가: 이 사건의 시나리오를 다루는 테스트 케이스를 추가합니다.
- 기능 모니터링 프로젝트: Logto Cloud 외에도 자체 사이드 프로젝트를 생성하고, 릴리스 전 잠재적 문제를 잡아낼 수 있도록 Logto와 깊이 통합합니다.