Share via


Single Sign-Out

업데이트: 2015년 6월 19일

Azure에 적용합니다.

이제 Microsoft Azure Active Directory Access Control(Access Control Service 또는 ACS라고도 함)에는 Single Sign-On을 보완하는 선택적 Single Sign-Out 기능이 포함되어 있습니다. 그 결과 ACS와 통합된 웹 기반 애플리케이션 사용자를 위한 완전하고 일관된 로그온 및 로그아웃 환경이 생성됩니다.

최종 사용자가 SSO(Single Sign-On)를 지원하는 신뢰 당사자 응용 프로그램에서 로그아웃하면 ACS에서는 ID 공급자 사이트에서 사용자를 자동으로 로그아웃하고 해당 ID 공급자를 사용하여 로그온한 다른 모든 응용 프로그램에서도 이 사용자를 로그아웃합니다. 마찬가지로 고객이 ID 공급자 웹 사이트에서 로그아웃하면 ACS에서는 이 고객이 해당 ID 공급자를 사용하여 로그온한 응용 프로그램에서 이 고객을 자동으로 로그아웃합니다.

이 항목에서는 SSO(Single Sign-Out) 작동 방법 및 신뢰 당사자 응용 프로그램에 SSO(Single Sign-Out)를 구현하는 방법에 대해 설명합니다. ASP.NET MVC 4 애플리케이션에서 페더레이션된 Single Sign-Out을 구현하기 위한 샘플 코드를 검토해야 합니다. 코드 샘플: 페더레이션 로그아웃 t를 사용하여 MVC 4 ASP.NET.

시스템 요구 사항

SSO(Single Sign-Out)를 구현하는 데 필요한 도구 및 서비스는 다음과 같습니다.

  • Azure 구독

  • Visual Studio 2012

SSO(Single Sign-Out) 정보

각 브라우저 세션에서 고객은 페더레이션 ID 공급자를 선택하여 신뢰 당사자 응용 프로그램에 로그온할 수 있습니다. SSO(Single Sign-Out)를 사용하면 사용자가 ID 공급자나 신뢰 당사자 응용 프로그램에서 로그아웃할 때 동일한 ID 공급자를 사용하여 로그온한 모든 신뢰 당사자 응용 프로그램에서도 자동으로 로그아웃됩니다.

예를 들어 고객이 Microsoft 계정(Windows Live ID)을 사용하여 3개의 ACS 통합 신뢰 당사자 응용 프로그램에 로그온했다고 가정하면, 고객이 이 응용 프로그램 중 하나에서 로그아웃하면 자동으로 Microsoft 계정에서 로그아웃되고 나머지 두 개의 응용 프로그램에서도 로그아웃됩니다.

사용자 지정 WS-Federation 및 ADFS ID 공급자의 경우 전체 SSO(Single Sign-Out)가 지원되지만 제한된 단일 로그아웃 지원은 Facebook, Google, Microsoft 계정 및 Yahoo! ID 공급자입니다. 이러한 ID 공급자는 Single Sign-Out을 시작할 수 없습니다. 그러나 신뢰 당사자 애플리케이션이 Single Sign-Out을 시작하면 고객은 이러한 ID 공급자 및 해당 ID 공급자를 사용하여 로그온한 관련 신뢰 당사자 애플리케이션에서 로그아웃됩니다.

SSO(Single Sign-Out) 작동 방법

SSO(Single Sign-Out)는 ID 공급자나 신뢰 당사자 응용 프로그램에서 시작할 수 있습니다. 이 섹션에서는 이러한 각 로그아웃 프로세스에 대해 알아보고 신뢰 당사자 응용 프로그램에서 SSO(Single Sign-Out)를 설정하는 방법에 대해 설명합니다.

신뢰 당사자 응용 프로그램에서 로그아웃 시작

사용자가 신뢰 당사자 응용 프로그램에서 로그아웃할 때 SSO(Single Sign-Out)를 시작하려면 다음 매개 변수를 포함한 URL을 ACS WS-Federation 엔드포인트로 보냅니다.

  • wa: wsignout1.0으로 설정

  • wreply: 로그아웃 페이지의 URL, 즉 로그아웃이 완료되면 사용자가 리디렉션되는 페이지로 값을 설정합니다. 이 값은 RP 도메인 이름의 일부여야 합니다(예: "https://RP.com/"

  • wtrealm: ACS 관리 포털에서 신뢰 당사자 애플리케이션의 영역 속성 값으로 설정합니다.

다음은 SSO(Single Sign-Out)에 대한 샘플 URL입니다.

https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=<YourAppRealm>&wreply=<YourAppRealmLogoutPage>

예를 들어:

https://Fabrikam.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=" https://www.fabrikam.com/" &wreply= https://www.fabrikam.com/logout

신뢰 당사자가 시작한 Single Sign-Out을 구현하는 샘플 코드는 코드 샘플: 페더레이션 로그아웃을 사용하여 MVC 4 ASP.NET 참조하세요. 이 샘플에는 Wreplywrealm 값을 가져오고 SignOutRequestMessage 클래스의 인스턴스를 만드는 LogoutController.cs의 코드가 포함되어 있습니다.

ACS가 로그아웃 URL을 받으면 ACS는 wsignout1.0 요청을 전송하여 ID 공급자와의 고객 세션을 종료합니다. 그런 다음, ACS는 사용자가 ID 공급자를 사용하여 로그인한 다른 신뢰 당사자 애플리케이션에 wsignoutcleanup1.0 메시지를 보냅니다.

ID 공급자가 로그아웃 시작

ID 공급자가 시작한 로그아웃은 사용자 지정 WS-Federation 및 ADFS ID 공급자에서만 지원되며, Microsoft 계정(Windows Live ID), Google, Yahoo! 및 Facebook ID 공급자에는 지원되지 않습니다. 이러한 ID 공급자는 사용자가 로그아웃할 때 ACS나 신뢰 당사자 응용 프로그램에 알리지 않기 때문입니다.

사용자가 WS-Federation 또는 ADFS ID 공급자에서 로그아웃하면 ID 공급자는 다음 형식으로 ACS에 wsignoutcleanup1.0 로그아웃 정리 요청 메시지를 보냅니다. https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignoutcleanup1.0

ACS는 wsignoutcleanup1.0 메시지를 받으면 메시지의 <Referrer>: https://CustomIDP HTTP 헤더에 있는 참조자의 유효성을 검사하여 로그인 요청과 동일한 엔드포인트에서 요청이 시작되었는지 확인합니다. 여기서 Referrer> 값<은 ACSSignOut 쿠키의 로그인 URL에 있는 참조자 값입니다.

그런 다음 ACS는 ID 공급자와 연결된 현재 사용자의 클라이언트 브라우저 세션에 있는 모든 신뢰 당사자 애플리케이션에 wsignoutcleanup1.0 메시지를 보냅니다. 이 프로세스는 "신뢰 당사자 응용 프로그램이 로그아웃 시작" 섹션에 설명된 프로세스와 비슷합니다. ID 공급자는 이 공급자가 제어하는 로그아웃 페이지로 브라우저를 리디렉션하여 로그아웃 프로세스를 완료할 수 있습니다.

SSO(Single Sign-Out) 프로세스

이 섹션에서는 SSO(Single Sign-Out) 프로세스의 각 단계에 대해 설명합니다. ACS에서 세부사항을 처리하므로 이 프로세스를 완벽하게 이해할 필요는 없습니다. 단, 이 프로세스를 이해할 경우 사용자 지정이나 디버깅 시 유용할 수 있습니다.

SSO(Single Sign-Out) 단계별 설명

  1. ACS가 WS-Federation 엔드포인트에서 signout1.0 요청을 받으면 ACS는 ACSSignOut 쿠키에서 로그아웃 요청 초기자의 ID 공급자를 조회합니다.

    ACS는 다음 일치 규칙을 사용하여 ID 공급자를 식별합니다.

    • 로그아웃 요청에 wtrealm 매개 변수가 지정된 경우 ACS는 각 ID 공급자에 대한 신뢰 당사자 목록에서 wtrealm 값을 검색합니다.

    • wtrealm을 지정하지 않고 ACSSignOut 쿠키에 ID 공급자 항목이 하나만 있는 경우 ACS는 ACSSignOut 쿠키에서 ID 공급자를 사용합니다.

    • 그렇지 않으면 ACS는 wtrealm 매개 변수가 누락되어 로그아웃 시도가 실패했음을 나타내는 오류 페이지를 표시합니다.

  2. ACS는 인라인 프레임(<iframe) 요소가 있는 페이지를 제공하여 ID 공급자에게 signout1.0 메시지를 보냅니다>. 또한 ACS는 SignOutCleanup1.0 메시지를 포함하는 iframe> 요소를 시작 당사자가 아닌 모든 활성 WS-Federation 신뢰 당사자의 페이지에 추가하고 <ACS는 ACSSignOut 쿠키에서 신뢰 당사자를 제거합니다.

  3. 신뢰 당사자 로그아웃 상태를 표시하는 페이지에도 지정된 시간 동안 실행된 후 브라우저를 리디렉션하는 JavaScript가 포함됩니다. ACSSignOut 쿠키에 wreply 매개 변수를 지정한 경우 JavaScript는 wreply 값으로 표시된 주소로 리디렉션하여 로그아웃을 완료합니다. 그렇지 않으면 JavaScript는 ACS 관리 포털에 지정된 대로 신뢰 당사자의 반환 URL로 리디렉션됩니다.

ACS는 ACSSignOut이라는 세션 쿠키를 사용하여 사용자를 응용 프로그램에 인증하는 ID 공급자를 기록합니다. 이 쿠키는 세션 추적에서 확인할 수 있습니다. 세션 쿠키의 이름 형식 ACSSignOut.<YourACSNamespace>은 다음과 같습니다.

ACSSignOut 쿠키는 신뢰 당사자 애플리케이션 및 사용자를 인증한 ID 공급자를 식별합니다. ACS에서는 SSO(Single Sign-Out) 동안 이 쿠키를 사용하여 올바른 ID 공급자가 로그아웃되고, 이 ID 공급자를 사용하여 로그온한 다른 신뢰 당사자 응용 프로그램에서 사용자가 로그아웃되도록 합니다.

SSO(Single Sign-Out) 제한

SSO(Single Sign-Out) 사용 시 다음과 같은 제한이 있습니다.

  • 사용자 지정 WS-Federation ID 공급자 및 ADFS ID 공급자만 Single Sign-Out을 시작할 수 있습니다. Yahoo, Google, Microsoft 계정(Windows Live ID) 및 Facebook과 같은 소셜 ID 공급자는 고객이 ID 공급자 웹 사이트에서 로그아웃할 때 ACS 또는 신뢰 당사자 애플리케이션에 알리지 않습니다. 따라서 로그아웃이 ID 공급자 사이트에서 시작될 경우 이러한 ID 공급자를 사용하는 신뢰 당사자 응용 프로그램 사용자는 자동으로 로그아웃되지 않습니다.

  • SSO(Single Sign-Out)가 일부 환경에서는 적용되지 않을 수 있습니다. ACS는 신뢰 당사자 애플리케이션에서 단일 로그아웃 메시지를 받으면 wsignout1.0 요청을 ID 공급자에게 보내고 wsignoutcleanup1.0 메시지를 다른 신뢰 당사자 애플리케이션 각각에 보냅니다. ACS는 식별 공급자로부터 wsignoutcleanup1.0 요청 메시지를 받으면 각 신뢰 당사자 애플리케이션에 wsignoutcleanup1.0 메시지를 보냅니다. 하지만 ID 공급자나 신뢰 당사자 응용 프로그램이 사용자를 로그아웃하여 적절하게 응답하지 않을 수도 있습니다.

  • 사용자가 Internet Explorer에서 Google ID 공급자를 로그아웃하면 브라우저에 "보안 콘텐츠만 표시됩니다." 프롬프트가 표시됩니다. 로그아웃을 완료하려면 사용자가 "모든 콘텐츠 표시"를 클릭해야 합니다. 로그아웃이 완료되면 브라우저가 wreply 매개 변수 값으로 지정된 URL로 리디렉션됩니다.

    Internet Explorer 9 이상 버전에는 보안 페이지에 비보안 콘텐츠(예: 비보안 서버에서 보낸 이미지나 스크립트 등)가 표시되면 보안 콘텐츠 알림이 표시됩니다. 이 경우 ID 공급자의 보안(HTTPS/SSL) ACS 콘텐츠 및 비보안(HTTP) 콘텐츠에 반응합니다. ACS에서 이 동작을 변경하거나 숨길 수 없습니다.

    Internet Explorer 9 이상에서 "보안 콘텐츠만 표시됨" 알림에 설명된 대로 사용자는 알림을 표시하지 않을 수 있습니다. 하지만 이 설정은 모든 웹 사이트에 적용되며, 사용자 컴퓨터를 악의적인 콘텐츠에 노출하게 할 수 있으므로 비보안(HTTP)콘텐츠를 차단하는 기본 설정을 사용하는 것이 좋습니다.

최종 사용자가 SSO(Single Sign-Out)를 시작하도록 지원하려면 신뢰 당사자 응용 프로그램의 로그아웃 페이지에서 사용자가 브라우저를 닫고 다른 신뢰 당사자 응용 프로그램 및 ID 공급자 웹 사이트를 명시적으로 로그아웃하도록 지시해야 합니다. 브라우저 탭, 창 또는 페이지만 닫아서는 안 됩니다. 컴퓨터가 공유되고 있거나 공공장소(예: 키오스크 컴퓨터)에 있는 경우 사용자는 브라우저를 닫기 전에 브라우저 기록을 지워야 합니다.

참고 항목

개념

코드 샘플: 페더레이션 로그아웃을 사용하여 MVC 4 ASP.NET

기타 리소스

WIF에서 ASP.NET의 수동 인증