다음을 통해 공유


웹 인증 브로커 워크플로 이해 및 디버그(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

웹 인증 브로커를 사용하여 사용자에 대해 SSO(Single Sign-On)를 설정하고 여러 Windows 스토어 앱에서 단일 서비스에 매끄럽게 인증할 수 있습니다. 웹 인증 브로커는 OAuth 및 OpenID 인터넷 인증 프로토콜을 지원하므로 사용자 인증을 제공하는 웹 서비스와 해당 앱을 통합할 수 있습니다. 이 경우 Facebook, Flickr, Google 및 Twitter와 같은 서비스의 사용자 ID를 앱에서 이용할 수 있습니다.

앱이 웹 인증 브로커를 호출하면 로그인하는 데 필요한 웹 페이지가 렌더링된 대화 상자가 표시됩니다. 서비스 공급자는 사용자가 해당 인증에 명시적으로 동의할 수 있도록 해야 하며, 일반적으로 "로그인 상태로 유지" 옵션을 포함합니다. 또한 로그온 페이지에 개인 정보 취급 방침에 대한 링크를 제공하여 사용자의 ID가 어떻게 사용되는지 명확히 안내해야 합니다. 사용자가 해당 단계를 완료하면 대화 상자가 사라지고 사용자는 앱에서 작업을 계속합니다.

다음 다이어그램에서는 예제 모달 대화 상자를 보여 줍니다.

사용자 인증을 위한 샘플 대화 상자

웹 인증 브로커 사용의 이점

웹 인증 브로커는 다음과 같은 이점을 제공합니다.

  • 앱 개발자가 자신의 앱 내에 브라우저 컨트롤을 호스트할 필요가 없는 사용하기 쉬운 프로그래밍 인터페이스
  • Windows 8 사용자 인터페이스와 공급자의 웹 페이지 통합. 온라인 공급자에 대한 자세한 내용은 온라인 공급자에 대한 웹 인증 브로커를 참조하세요.
  • 앱과 격리된 사용자 자격 증명
  • 온라인 공급자를 사용한 사용한 SSO(Single Sign-On) 기본 지원

웹 인증서 브로커의 작동 방법

웹 인증 브로커는 앱과 인증 서비스 간의 브로커 또는 촉진자로, API 집합, 브로커 및 웹 호스트로 구성됩니다. 앱에서는 API를 사용하여 브로커와 통신합니다. 브로커는 개별 앱 컨테이너에 새로운 웹 호스트 프로세스를 만듭니다. 브로커는 앱과 통신하고, UI(사용자 인터페이스)를 만들고, 웹 인증 호스트의 수명 주기를 제어합니다. 웹 인증 호스트는 온라인 인증 공급자의 웹 사이트에서 페이지를 렌더링합니다.

다음 다이어그램에서는 웹 인증 브로커를 사용하여 정보의 흐름을 보여 줍니다.

웹 인증 브로커에 대한 데이터 흐름

웹 인증 브로커를 사용의 일반적인 흐름은 다음과 같습니다.

  1. 1. 앱에서 WebAuthenticationBroker.AuthenticateAsync 메서드를 사용하여 웹 인증 브로커를 호출합니다. 시작 요청 URI 및 인증 호출 완료 시를 위한 콜백 URI를 제공합니다. 이들은 OAuth 2.0 프로토콜에서 인증 끝점 URI와 리디렉션 URI에 해당합니다. OpenID 프로토콜 및 OAuth의 이전 버전은 개념이 유사합니다.
  2. 브로커에서 호출하는 앱에 대한 모달인 시스템 대화 상자를 만듭니다.
  3. 브로커에서 호출하는 앱 또는 시스템의 다른 앱과는 별개인 전용 앱 컨테이너를 선택하고 저장된 쿠키를 지웁니다. 참고  이 앱 컨테이너는 브로커가 SSO(Single Sign-On) 모드에서 시작된 경우가 아니면 두 개의 앱에서 동시에 공유되지 않습니다.  
  4. 브로커에서 선택한 앱 컨테이너에서 웹 인증 호스트를 시작합니다.
  5. 브로커에서 호스트의 창을 앞서 만든 대화 상자에 연결합니다. 호스트 창은 웹 콘텐츠의 렌더링을 담당합니다.
  6. 웹 인증 호스트는 요청 URI로 이동합니다. 일반적으로 이 페이지는 로그온 페이지입니다.
  7. 사용자가 링크를 클릭하거나 정보를 제출하여 온라인 공급자 웹 사이트와 상호 작용하면 호스트는 해당 사이트로 이동하기 전에 각 URI가 앱에서 제공하는 콜백 URI와 일치하는지 확인합니다.
  8. 일치가 발견되면 호스트는 탐색을 끝내고 브로커에 신호를 보냅니다.
  9. 브로커가 대화 상자를 사라지게 하고, 앱 컨테이너에서 호스트가 만든 저장된 쿠키를 지운 다음 프로토콜 데이터를 응용 프로그램에 반환합니다.

웹 인증서 브로커 Single Sign-On의 작동 방법

웹 인증서 브로커는 특수한 용도의 SSO 앱 컨테이너에서 지속형 쿠키를 허용하여 SSO(Single Sign-On)를 사용하도록 설정합니다. 이 컨테이너를 사용하기 위해 앱에서 콜백 URI를 사용하지 않는 AuthenticateAsync 메서드 오버로드를 호출할 수 있습니다. 시작 리디렉션 URL은 "ms-app://<SID>" 형식이어야 합니다. 여기서 <SID>는 호출 패키지의 SID와 일치합니다. 그런 다음 인증 서비스를 유효한 리디렉션 URL("리디렉션 끝점"이라고도 함)로 사용하여 각 앱의 SID를 등록할 수 있습니다.

예를 들어 Fabrikam은 Contoso 서비스를 사용하는 Windows 스토어 앱의 개발자입니다. 개발 시 Fabrikam은 해당 응용 프로그램을 Windows 개발자 센터에 등록했으며 고유 SID를 받았습니다. 그런 다음 해당 앱 SID를 Contoso.com 인증 서비스에 유효한 리디렉션 URL로 등록했습니다. Fabrikam은 두 개의 SID를 리디렉션 URL로 등록했으며, 그중 하나는 "ms-app://S-1-5-4321"입니다.

런타임에 Fabrikam의 Windows 스토어 앱이 SSO 모드로 웹 인증 브로커를 호출합니다. 요청 처리 과정에서 Contoso.com은 리디렉션 URL이 등록된 URL 집합에 포함된 것을 확인합니다. Contoso는 사용자를 인증한 후 액세스 토큰을 뒤에 추가("ms-app://S-1-5-4321?token=ABC")하여 요청된 리디렉션 URL로 리디렉션합니다. 웹 인증 브로커는 호출 앱의 SID와 일치하는 이 형식의 URL을 발견할 경우 쿼리 문자열이나 게시물 데이터에 포함된 토큰을 앱에 다시 반환합니다.

SSO 앱 컨테이너에 이미 쿠키가 있는 경우에는 사용자가 Contoso에 로그인할 필요가 없습니다. Contoso에서 등록된 리디렉션 URL 중 하나가 요청되는지 확인하여 앱 ID를 검증하고 웹 인증 브로커는 Contoso에서 리디렉션하려는 것과 동일한 SID를 공유하는 앱만 프로토콜 데이터를 가져올 수 있도록 하기 때문에 다른 앱이 Fabrikam의 앱을 가장하려고 해도 실패합니다.

웹 인증 브로커 문제 해결

작업 로그 검토, Fiddler를 사용하여 웹 요청 및 응답 검토 등 앱의 웹 인증 브로커 API 문제를 해결하는 여러 가지 방법이 있습니다.

작업 로그

대체로 작업 로그를 사용하여 작동하지 않는 항목을 확인할 수 있습니다. 웹 사이트 개발자가 웹 인증 브로커에 의한 웹 페이지 처리 방법을 이해할 수 있도록 도와주는 전용 이벤트 로그 채널인 Microsoft-Windows-WebAuth\Operational이 있습니다. 이 채널을 사용하려면 eventvwr.exe를 시작하고 Application and Services\Microsoft\Windows\WebAuth 아래의 작업 로그를 사용하도록 설정합니다. 또한 웹 인증 브로커는 웹 서버에서 자신을 식별하는 고유 문자열을 사용자 에이전트 문자열 뒤에 추가합니다. 해당 문자열은 "MSAuthHost/1.0"입니다. 버전 번호는 나중에 변경될 수 있으므로 사용자 코드에 이 버전 번호를 사용하면 안 됩니다. 전체 사용자 에이전트 문자열 예제는 다음과 같습니다.

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MSAuthHost/1.0)

작업 로그 사용 예제

  1. 작업 로그 사용
  2. Contoso 소셜 앱 실행WebAuth 작업 로그를 표시하는 이벤트 뷰어
  3. 생성된 로그 항목을 사용하여 웹 인증 브로커의 동작을 자세히 파악할 수 있습니다. 이 경우 다음과 같은 항목이 포함될 수 있습니다.
    • 탐색 시작: AuthHost가 시작된 시간을 기록하고 시작 및 종료 URL에 대한 정보를 포함합니다.
    • 탐색 시작의 세부 정보를 보여 줍니다.
    • 탐색 완료: 웹 페이지 로드 완료를 기록합니다.
    • 메타 태그: 메타 태그가 발견된 시간을 기록하며 세부 정보를 포함합니다.
    • 탐색 종료: 사용자가 종료한 탐색입니다.
    • 탐색 오류: AuthHost가 URL에서 탐색 오류를 발견했으며 HttpStatusCode를 포함합니다.
    • 탐색 종료: 종료 URL이 발견되었습니다.

웹 인증 브로커와 함께 Fiddler 사용

Windows 8 앱과 함께 Fiddler 웹 디버거를 사용할 수 있습니다.

  1. AuthHost는 개인 네트워크 기능을 제공하기 위해 고유한 앱 컨테이너에서 실행되므로 레지스트리 키를 설정해야 합니다. Windows 레지스트리 편집기 버전 5.00

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\authhost.exe\EnablePrivateNetwork = 00000001

    •                      Data type
                           DWORD
  2. 아웃바운드 트래픽을 생성하는 AuthHost에 대한 규칙을 추가합니다.

    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
    D:\Windows\System32>CheckNetIsolation.exe LoopbackExempt -s
    List Loopback Exempted AppContainers
    [1] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
        SID:  S-1-15-2-1973105767-3975693666-32999980-3747492175-1074076486-3102532000-500629349
    [2] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
        SID:  S-1-15-2-166260-4150837609-3669066492-3071230600-3743290616-3683681078-2492089544
    [3] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.a.p_8wekyb3d8bbwe
        SID:  S-1-15-2-3506084497-1208594716-3384433646-2514033508-1838198150-1980605558-3480344935
    
  3. Fiddler로 들어오는 트래픽에 대한 방화벽 규칙을 추가합니다.

자세한 내용은 Windows 스토어 앱에 Fiddler 웹 디버거 사용에 대한 블로그(영문)를 참조하세요.

관련 항목

온라인 공급자에 대한 웹 인증 브로커

웹 인증 브로커 샘플

Windows.Security.Authentication.Web