하나의 돌로 된 통로에 두 출입문이 이어져 있습니다.

프로덕트 노트

로그아웃의 연쇄

사용자는 한 번 로그인하지만 그 과정에서 여러 세션이 만들어집니다. 로그아웃할 때는 어느 세션을 어디까지 종료해야 하는지 살펴야 합니다.

로그인은 한 번, 열쇠는 세 개

서비스에 “Google로 로그인”을 추가했다고 합시다. 사용자에게는 버튼을 한 번 누른 경험입니다.

하지만 내부에서는 경로에 있는 시스템마다 자신의 세션을 발급하고 보관합니다. Google에 하나, Authrim에 하나, 앱에 하나로 모두 세 개입니다.

어딘가에 세션이 남으면 사용자가 계속 작업하거나 비밀번호 없이 다시 로그인할 수 있습니다.

로그아웃은 완료 문구를 띄우는 것만이 아닙니다.
종료할 범위를 정하고 그 안의 세션을 끝내는 일입니다.

토큰 폐기는 별개의 작업입니다

여기서 열쇠는 세션입니다. 액세스 토큰과 리프레시 토큰은 별도 체계이므로 세션 종료가 이미 발급한 토큰을 자동으로 무효화하지는 않습니다. 토큰 폐기는 별도로 처리해야 합니다.

OIDC에서 세션 로그아웃, 토큰 폐기, 상위 IdP의 계정 비활성화는 서로 다른 작업입니다. 이 글은 세션을 다룹니다. 토큰은 토큰 인트로스펙션과 폐기 문서를 참고하세요.

Authrim은 중간에 있습니다

이 연결에서 상위 공급자는 로그인을 제공하고 앱은 로그인을 요청합니다. Authrim의 역할은 어느 쪽을 향하느냐에 따라 달라집니다.

상위 IdP Google, Entra ID, Apple Authrim 사용자의 인증 플랫폼 자사 앱 사용자가 실제로 여는 화면 로그인 요청 = 요청자(RP) 로그인 제공 = 제공자(OP) 방향에 따라 역할이 바뀜
여행사와 비슷합니다. 여행객에게는 여행을 준비하는 회사지만 항공사에는 좌석을 구매하는 고객입니다. Authrim도 두 역할을 함께 수행합니다.

로그아웃은 도중에 멈추기 쉽습니다

로그인은 경로를 따라 진행되지만 로그아웃은 명시적으로 전달해야 합니다.

상위 세션을 종료해도 Authrim이나 앱의 세션이 자동으로 사라지지는 않습니다. 하위에 종료를 알리고, 수신한 시스템이 대응하는 세션을 종료해야 합니다. 다음 그림은 필요한 알림 방식과 설정이 갖춰진 경우입니다.

연결이 끊긴 경우 상위 IdP 세션 종료 알림이 오지 않음 Authrim 세션 유지 자사 앱 세션 유지 결과: 여전히 접근 가능 연결된 경우 상위 IdP 세션 종료 “이 세션을 종료” 서명된 알림 Authrim 종료 후 하위로 전달 “이 세션을 종료” 서명된 알림 자사 앱 세션 종료 결과: 세 세션 모두 종료
차이는 가운데 화살표입니다. Authrim이 알림을 받고 하위로 전달할 수 있는가를 확인해야 합니다. 상위 공급자와 각 앱도 필요한 방식을 지원하고 설정해야 연결이 완성됩니다.

현장에서는 이렇게 나타납니다

상황연결이 끊겼을 때 생기는 일
퇴사 처리 인사팀이 접근 권한을 회수해도 노트북의 앱은 계속 열려 있고, 다음 날 아침까지 내부 자료가 보입니다.
공용 단말기 매장, 병원, 콜센터에서 이전 사용자가 로그아웃했는데 다른 탭에는 그 사용자의 대시보드가 남아 있습니다.
기기 분실 ‘모든 곳에서 로그아웃’을 눌렀지만 현재 세션만 종료됩니다.
사고 대응 침해된 계정을 차단해도 공격자의 세션은 만료될 때까지 유지됩니다.
감사 ‘모든 시스템에 로그아웃이 전파됨을 입증해 주세요.’ 제시할 근거가 없습니다.

로그아웃 버튼이 없거나 화면이 바뀌지 않는 문제가 아닙니다. 실제 적용 범위가 예상보다 좁다는 점 때문에 발견하기 어렵습니다.

브라우저를 통한 전달의 한계

하위에 알리는 방법은 두 가지입니다. 그중 브라우저에 의존하는 방법은 제약을 더 많이 받습니다.

브라우저 경유 Authrim 브라우저 앱별 숨겨진 프레임 자사 앱 브라우저 개인정보 보호가 알림을 막을 수 있음 서버 간 직접 통신 Authrim 서명된 알림 직접 전달 브라우저를 거치지 않음 자사 앱
위 방식은 숨겨진 프레임으로 앱에 알리므로 브라우저의 개인정보 보호 기능에 제한될 수 있습니다. 백채널은 서버 간 통신으로 브라우저 상태에 의존하지 않습니다. 다만 네트워크 장애, 수신 서버 중단, 시간 초과, 5xx 응답으로 실패할 수 있습니다. 재시도, 큐, 실패 기록은 구현에서 마련해야 합니다.

Authrim의 인증 범위에는 백채널 알림 수신이 포함됩니다. 수신과 하위 전송은 각각 확인해야 합니다.

받는 쪽과 보내는 쪽을 함께 확인합니다

Authrim은 상위 공급자에 대해서는 RP, 앱에 대해서는 OP 역할을 합니다. 로그아웃을 전달하려면 두 역할 모두 규격을 따라야 합니다.

  • RP 역할: 상위 알림을 검증하고 해당 Authrim 세션을 종료합니다.
  • OP 역할: 연결된 앱이 해당 세션을 종료할 수 있도록 알림을 보냅니다.

OP·RP 로그아웃 프로파일 인증은 두 역할을 확인하는 근거입니다. Authrim은 OpenID Foundation의 공식 적합성 테스트를 사용하는 자체 인증 절차를 통해 양쪽 로그아웃 프로파일 인증을 취득했습니다.

인증은 제출한 구현 버전이 신청한 프로파일의 적합성 테스트를 통과했다는 뜻입니다. 고객 네트워크와 모든 앱의 세션이 즉시 종료됨을 보장하지는 않습니다.

상위 공급자와 앱이 필요한 방식을 지원하고 알림 주소와 세션 매핑을 설정해야 합니다. 상위 계정 비활성화가 반드시 로그아웃 알림을 발생시키지도 않습니다. 배포 환경에서 전달 실패, 재시도, 실패 확인도 검증해야 합니다.

인증 버전과 프로파일은 OpenID Foundation의 Certified OpenID Relying Parties & Logout Profiles 목록에서, 범위는 인증 제도 설명에서 확인할 수 있습니다.

로그아웃한 뒤, 어디에 로그인 상태가 남아 있나요?

공용 단말을 다음 사람에게 넘기거나 퇴사자의 접근을 중단할 때 확인할 범위입니다. Authrim은 상위 IdP와 앱 사이에서 알림을 받고 보냅니다. 인증은 구현의 확인 자료이고, 연결된 시스템의 테스트는 실제 종료 범위를 확인하는 과정입니다.