프로덕트 노트
로그아웃의 연쇄
사용자는 한 번 로그인하지만 그 과정에서 여러 세션이 만들어집니다. 로그아웃할 때는 어느 세션을 어디까지 종료해야 하는지 살펴야 합니다.
로그인은 한 번, 열쇠는 세 개
서비스에 “Google로 로그인”을 추가했다고 합시다. 사용자에게는 버튼을 한 번 누른 경험입니다.
하지만 내부에서는 경로에 있는 시스템마다 자신의 세션을 발급하고 보관합니다. Google에 하나, Authrim에 하나, 앱에 하나로 모두 세 개입니다.
어딘가에 세션이 남으면 사용자가 계속 작업하거나 비밀번호 없이 다시 로그인할 수 있습니다.
로그아웃은 완료 문구를 띄우는 것만이 아닙니다.
종료할 범위를 정하고 그 안의 세션을 끝내는 일입니다.
토큰 폐기는 별개의 작업입니다
여기서 열쇠는 세션입니다. 액세스 토큰과 리프레시 토큰은 별도 체계이므로 세션 종료가 이미 발급한 토큰을 자동으로 무효화하지는 않습니다. 토큰 폐기는 별도로 처리해야 합니다.
OIDC에서 세션 로그아웃, 토큰 폐기, 상위 IdP의 계정 비활성화는 서로 다른 작업입니다. 이 글은 세션을 다룹니다. 토큰은 토큰 인트로스펙션과 폐기 문서를 참고하세요.
Authrim은 중간에 있습니다
이 연결에서 상위 공급자는 로그인을 제공하고 앱은 로그인을 요청합니다. Authrim의 역할은 어느 쪽을 향하느냐에 따라 달라집니다.
로그아웃은 도중에 멈추기 쉽습니다
로그인은 경로를 따라 진행되지만 로그아웃은 명시적으로 전달해야 합니다.
상위 세션을 종료해도 Authrim이나 앱의 세션이 자동으로 사라지지는 않습니다. 하위에 종료를 알리고, 수신한 시스템이 대응하는 세션을 종료해야 합니다. 다음 그림은 필요한 알림 방식과 설정이 갖춰진 경우입니다.
현장에서는 이렇게 나타납니다
| 상황 | 연결이 끊겼을 때 생기는 일 |
|---|---|
| 퇴사 처리 | 인사팀이 접근 권한을 회수해도 노트북의 앱은 계속 열려 있고, 다음 날 아침까지 내부 자료가 보입니다. |
| 공용 단말기 | 매장, 병원, 콜센터에서 이전 사용자가 로그아웃했는데 다른 탭에는 그 사용자의 대시보드가 남아 있습니다. |
| 기기 분실 | ‘모든 곳에서 로그아웃’을 눌렀지만 현재 세션만 종료됩니다. |
| 사고 대응 | 침해된 계정을 차단해도 공격자의 세션은 만료될 때까지 유지됩니다. |
| 감사 | ‘모든 시스템에 로그아웃이 전파됨을 입증해 주세요.’ 제시할 근거가 없습니다. |
로그아웃 버튼이 없거나 화면이 바뀌지 않는 문제가 아닙니다. 실제 적용 범위가 예상보다 좁다는 점 때문에 발견하기 어렵습니다.
브라우저를 통한 전달의 한계
하위에 알리는 방법은 두 가지입니다. 그중 브라우저에 의존하는 방법은 제약을 더 많이 받습니다.
Authrim의 인증 범위에는 백채널 알림 수신이 포함됩니다. 수신과 하위 전송은 각각 확인해야 합니다.
받는 쪽과 보내는 쪽을 함께 확인합니다
Authrim은 상위 공급자에 대해서는 RP, 앱에 대해서는 OP 역할을 합니다. 로그아웃을 전달하려면 두 역할 모두 규격을 따라야 합니다.
- RP 역할: 상위 알림을 검증하고 해당 Authrim 세션을 종료합니다.
- OP 역할: 연결된 앱이 해당 세션을 종료할 수 있도록 알림을 보냅니다.
OP·RP 로그아웃 프로파일 인증은 두 역할을 확인하는 근거입니다. Authrim은 OpenID Foundation의 공식 적합성 테스트를 사용하는 자체 인증 절차를 통해 양쪽 로그아웃 프로파일 인증을 취득했습니다.
인증은 제출한 구현 버전이 신청한 프로파일의 적합성 테스트를 통과했다는 뜻입니다. 고객 네트워크와 모든 앱의 세션이 즉시 종료됨을 보장하지는 않습니다.
상위 공급자와 앱이 필요한 방식을 지원하고 알림 주소와 세션 매핑을 설정해야 합니다. 상위 계정 비활성화가 반드시 로그아웃 알림을 발생시키지도 않습니다. 배포 환경에서 전달 실패, 재시도, 실패 확인도 검증해야 합니다.
인증 버전과 프로파일은 OpenID Foundation의 Certified OpenID Relying Parties & Logout Profiles 목록에서, 범위는 인증 제도 설명에서 확인할 수 있습니다.
로그아웃한 뒤, 어디에 로그인 상태가 남아 있나요?
공용 단말을 다음 사람에게 넘기거나 퇴사자의 접근을 중단할 때 확인할 범위입니다. Authrim은 상위 IdP와 앱 사이에서 알림을 받고 보냅니다. 인증은 구현의 확인 자료이고, 연결된 시스템의 테스트는 실제 종료 범위를 확인하는 과정입니다.