OIDC 애플리케이션을 위한 단일 로그아웃

단일 로그아웃(SLO) 기능을 사용하면 사용자는 모든 싱글 사인온(SSO) 애플리케이션에서 동시에 로그아웃할 수 있습니다. 이 기능은 특히 기기를 다른 사람과 공유할 때, 종료되지 않은 세션에 대한 무단 접근을 차단하여 보안을 강화합니다.

단일 로그아웃(SLO) 기능을 구현하면 세 가지 종류의 세션이 존재합니다.
지원 설명회
이 애플리케이션은 사용자 인증에 OP( OpenID ) 방식을 사용하지만, 애플리케이션에 로그인한 사용자를 추적할 수도 있습니다. 일반적으로 애플리케이션은 브라우저 쿠키를 통해 세션을 추적합니다. 이 애플리케이션은 로그아웃 시 세션을 정리해야 합니다.
인증 서버 OpenID 제공자(OP) 세션
인증 서버는 또한 사용자 세션을 유지 관리하며 이를 쿠키에 저장합니다. 인증 서버는 로그아웃 시 사용자 세션과 함께 해당 세션과 관련된 권한 및 토큰을 모두 삭제합니다.
ID 소스 세션
사용자는 신원 정보 소스의 사용자 세션을 통해 로그인할 수 있습니다. 로그아웃 시, 사용자는 해당 사용자 세션에서도 로그아웃하기를 원할 수 있습니다.
참고: 단일 로그아웃 기능은 ID 제공자 세션에서의 로그아웃을 지원하지 않습니다. 또한 SAML 애플리케이션에서의 로그아웃 기능을 지원하지 않습니다. SAML 에는 IdP-initiated 및 SP 주도 로그아웃을 수행하는 유사한 엔드포인트가 있지만, OIDC 단일 로그아웃 기능과는 통합되어 있지 않습니다.

인증 서버(OP)가 애플리케이션에 로그아웃이 실행되었음을 알리는 데에는 프론트 채널과 백 채널이라는 두 가지 방식이 있습니다. 두 메커니즘 모두에서, 애플리케이션은 인증 서버가 호출하는 로그아웃 엔드포인트를 등록합니다. 이 엔드포인트는 애플리케이션이 세션을 지우는 데 사용하는 코드를 감싸고 있습니다. 애플리케이션의 로그아웃 엔드포인트를 호출하는 것은 신뢰할 수 없습니다. 왜냐하면 IBM® Verify 는 재시도할 의무가 없으며, 애플리케이션이 세션을 성공적으로 삭제했는지 확인할 의무도 없기 때문입니다. 백채널 로그아웃이 권장되는 방식입니다.

전면 채널 로그아웃
프론트채널 로그아웃 또는 클라이언트 측 로그아웃은 클라이언트(일반적으로 웹 브라우저)가 서버와 직접 통신하여 사용자의 세션을 무효화하는 단일 로그아웃(SLO) 방식입니다. 일반적으로 서버에 세션 쿠키나 토큰을 삭제해 달라는 요청을 보내는 방식으로 이루어집니다. 그러면 서버에서 로그아웃을 확인하는 응답을 보냅니다. 이 방법은 간단하며 단일 도메인 환경에서는 효과적입니다. 그러나 크로스 오리진 통신 및 보안과 관련된 잠재적인 문제로 인해, 복잡하거나 다중 도메인, 다중 프로토콜 환경에는 적합하지 않을 수 있습니다. 프론트 채널 메커니즘을 사용할 경우, 인증 서버(OP)는 페이지에 를 렌더링하여 <iframe src="frontchannel_logout_uri"> 애플리케이션의 로그아웃 엔드포인트에 대한 호출을 HTTP GET 트리거합니다. 애플리케이션은 인증 서버에 세션 ID(sid) 및 발급자(iss) 정보를 추가 쿼리 매개변수로 전송해 줄 것을 요청할 수 있습니다. 애플리케이션 클라이언트를 동적 클라이언트 등록을 사용하여 생성하는 경우, client metadata를 true로 설정하십시오 frontchannel_logout_session_required . IBM VerifyOpenID 애플리케이션을 관리자 UI에서 구성할 때, 해당 설정은 ‘로그인’ 탭에서 확인할 수 있습니다. ‘단일 로그아웃 설정 ’ 섹션으로 스크롤한 다음 ‘세션 필요’ 확인란을 선택하세요. 이 애플리케이션은 해당 정보를 사용하여 요청의 유효성을 확인하고, 어떤 세션에서 로그아웃할지 결정할 수 있습니다. 이 sid 정보가 인증 서버(OP)와의 현재 또는 최근 세션과 일치하지 않는 경우, 애플리케이션이 로그아웃 요청을 무시할 수 있습니다.
참고: OIDC 프론트 채널 로그아웃은 프론트 채널 로그아웃 엔드포인트를 호출할 때 를 iframe 사용할 것을 권장합니다. iframe최신 브라우저는 기본적으로 타사 쿠키가 전송되는 것을 차단합니다. 애플리케이션의 도메인이 인증 서버의 도메인과 다를 경우, 애플리케이션은 쿠키를 수신하지 못하게 되며, 이로 인해 사용자가 정상적으로 로그아웃되지 않을 수 있습니다. 사용자는 인증 서버 도메인에 대한 제3자 쿠키를 허용하도록 브라우저를 설정해야 합니다.
백채널 로그아웃
백채널 로그아웃 또는 서버 측 로그아웃은 신원 제공자( IdP )가 서비스 제공자(SP)와 직접 통신하여 사용자의 세션을 무효화하는 단일 로그아웃(SLO) 방식입니다. 이는 일반적으로 초기 인증 과정에서 인증 서버( IdP )와 서비스 제공자(SP) 사이에 설정된 보안 채널을 통해 이루어집니다. 백채널 메커니즘을 사용할 때, 인증 서버(n)는 직접 백채널 API를 통해 애플리케이션의 로그아웃 엔드포인트로 HTTP POST 요청을 수행합니다. 인증 서버는 다음 정보를 포함하는 로그아웃 JWT 토큰을 발급합니다.
청구 이름 사용량 설명
iss 필수 발행자 식별자.
sub 선택사항 주체 ID입니다. 가 없을 때는 sid 반드시 있어야 한다.
aud 필수 청중 또는 청중들.
iat 필수 발행일:
exp 필수 만료 시간.
jti 필수 토큰의 고유 식별자.
events 필수 http://schemas.openid.net/event/backchannel-logout회원 이름이 포함된 JSON 객체.
sid 선택사항 세션 식별자. 가 없을 때는 sub 반드시 있어야 한다.
인증 서버(OP)는 ID 토큰과 동일한 구성을 사용하여 로그아웃 JWT 토큰에 서명하거나, 암호화하거나, 또는 두 가지 작업을 모두 수행합니다.
end_session_endpoint애플리케이션 의존 당사자(RP)가 시작한 로그아웃 시나리오에서, 애플리케이션은 인증 서버의 검색 엔드포인트에 게시된 인증 서버의 엔드포인트로 리디렉션하여 로그아웃을 트리거합니다. 이 애플리케이션은 다음과 같은 요청 매개변수를 전송할 수 있습니다.
매개변수 이름 사용량 설명
id_token_hint 권장 인증 서버가 애플리케이션과의 사용자 인증 세션에 대한 단서로 발급한 ID 토큰입니다.
logout_hint 선택사항 로그아웃하는 사용자에 대한 정보를 인증 서버에 알리는 것.
client_id 선택사항 애플리케이션의 클라이언트 식별자.
post_logout_redirect_uri 선택사항 로그아웃이 완료된 후, 애플리케이션이 사용자의 사용자 에이전트를 리디렉션하도록 요청하는 URI입니다.
state 선택사항 애플리케이션이 로그아웃 요청과 엔드포인트에 post_logout_redirect_uri 대한 콜백 사이에서 상태를 유지하는 데 사용하는 불투명한 값입니다.
ui_locales 선택사항 사용자가 사용자 인터페이스에 대해 선호하는 언어 및 문자 체계.
id_token_hint 지정되지 않았거나 ID 토큰이 현재 로그인한 사용자의 것이 아닐 경우, 인증 서버는 사용자에게 인증 서버 세션을 종료할지 여부를 묻습니다. 다음으로, OP가 시작한 로그아웃 시나리오와 마찬가지로, 인증 서버는 동일한 인증 서버(OP) 세션으로 로그인된 애플리케이션 목록을 찾아냅니다. 채널 로그아웃 메커니즘 중 하나를 사용하여 애플리케이션에 알립니다. 그런 다음, 사용자가 동의하면 인증 서버는 자체 세션을 종료합니다. 가 post_logout_redirect_uri 지정되어 있고 클라이언트 구성에 따라 유효성이 검증될 경우, 로그아웃 절차가 완료되면 해당 URI로 리디렉션됩니다. 그렇지 않으면 인증 서버에서 로그아웃 요약 보고서를 표시합니다.
팁: 사용자 지정 애플리케이션의 로그아웃 엔드포인트를 구축하는 경우,
전면 채널 로그아웃
Verify 애플리케이션 로그아웃 엔드포인트가 3초 이내에 응답할 것으로 예상합니다.
비공식 채널에서 로그아웃하려면
  • Verify 이 엔드포인트는 성공 시 2xx 를, 오류 발생 시 400을 반환할 것으로 예상됩니다.
  • Verify 애플리케이션 로그아웃 엔드포인트가 3초 이내에 응답할 것으로 예상합니다.
  • JWT 로그아웃 토큰을 더 빠르게 검증하기 위해, 애플리케이션 로그아웃 엔드포인트는 JWKS 엔드포인트를 Verify 캐시합니다.