Web 認証ブローカーのワークフローの理解とデバッグ (HTML)

Web 認証ブローカーを使うと、ユーザーのシングル サインオン (SSO) を有効にして、複数の Windows ストア アプリに対する認証を 1 つのサービスからシームレスに受けることができます。Web 認証ブローカーでは、OAuth と OpenID のインターネット認証プロトコルをサポートしているため、認証を提供する Web サービスとアプリを統合することができます。これを使うと、Facebook、Flickr、Google、Twitter などのサービスのユーザー ID をアプリで利用できます。

アプリが Web 認証ブローカーを呼び出すと、ダイアログ ボックスが開き、サインインのために必要な Web ページが表示されます。サービスのプロバイダーは、ユーザーがこの認証に明示的に同意できるようにする必要があります。通常は、"ログインしたままにする" オプションを用意します。また、プロバイダーは、ID がどのように使われるかをユーザーに明示する必要があります。通常は、ログオン ページにプライバシーに関する声明へのリンクを提示します。これらの手順を完了すると、ダイアログ ボックスが閉じ、アプリの使用を継続できるようになります。

次の図に、モーダル ダイアログ ボックスの例を示します。

ユーザー認証のためのサンプル ダイアログ ボックス

Web 認証ブローカーを使うことの利点

Web 認証ブローカーには、次のような利点があります。

  • 使いやすいプログラミング インターフェイスにより、アプリ開発者は自身のアプリの中でブラウザー コントロールをホストする必要がありません。
  • プロバイダーの Web ページと Windows 8 ユーザー インターフェイスが統合されます。オンライン プロバイダーについて詳しくは、「Web 認証ブローカー (オンライン プロバイダー向け)」をご覧ください。
  • ユーザー資格情報がアプリから切り離されます。
  • オンライン プロバイダーを使ったシングル サインオンがネイティブにサポートされます。

Web 認証ブローカーのしくみ

Web 認証ブローカーとは、アプリと認証サービスの間のブローカー (仲介役) です。これは、API のセット、ブローカー、Web ホストで構成されます。アプリは、API を使ってブローカーと通信します。ブローカーは、異なるアプリ コンテナーに新しい Web ホスト プロセスを作成します。ブローカーはアプリと通信し、ユーザー インターフェイス (UI) を組み立てて、Web 認証ホストのライフサイクルを制御します。Web 認証ホストは、オンライン認証プロバイダーの Web サイトからページをレンダリングします。

次の図に、Web 認証ブローカーを使う情報のフローを示します。

Web 認証ブローカーのデータ フロー

Web 認証ブローカーを使う一般的なワークフローは次のとおりです。

  1. 1. アプリで WebAuthenticationBroker.AuthenticateAsync メソッドを使って Web 認証ブローカーを呼び出します。このとき、開始要求 URI と、認証呼び出しの完了時に呼び出されるコールバック URI を指定します。 これらは、OAuth 2.0 プロトコルの Authorization Endpoint URI と Redirection URI に対応しています。OpenID プロトコルと以前のバージョンの OAuth の概念は似ています。
  2. ブローカーは、呼び出し元アプリに対してモーダルなシステム ダイアログ ボックスを作成します。
  3. ブローカーは、呼び出し元アプリまたはシステム上の他のアプリとは別の専用のアプリ コンテナーを選び、保存された Cookie をすべて削除します。  このアプリ コンテナーは、シングル サインオン (SSO) モードでブローカーが開始された場合を除き、同時に 2 つのアプリに共有されることは決してありません。  
  4. ブローカーは、選ばれたアプリ コンテナーで Web 認証ホストを開始します。
  5. ブローカーは、前に作成したダイアログ ボックスにホストのウィンドウをアタッチします。ホスト ウィンドウでは、Web コンテンツのレンダリングを行います。
  6. Web 認証ホストは、要求の URI にナビゲートします。通常、これはログオン ページです。
  7. ユーザーがリンクをクリックしたり情報を送信したりしてオンライン プロバイダーの Web サイトとやり取りすると、ホストはナビゲートする前に、各 URI がアプリから提供されるコールバック URI と一致するかどうかをチェックします。
  8. 一致した場合、ホストはナビゲーションを終了し、ブローカーに通知します。
  9. ブローカーはダイアログ ボックスを削除し、ホストによって作成されて保存された Cookie をすべてアプリ コンテナーから削除して、プロトコル データをアプリケーションに戻します。

Web 認証ブローカーでのシングル サインオンの動作

Web 認証ブローカーでは、保存された Cookie を専用の SSO アプリ コンテナーに格納することでシングル サインオン (SSO) を実現します。このコンテナーをアプリで使うには、AuthenticateAsync メソッドのオーバーロードのうち、コールバック URI を受け取らないバージョンを呼び出します。開始リダイレクト URL は、"ms-app://<SID>" という形式にする必要があります。<SID> は呼び出し元パッケージの SID です。その後、各アプリの SID を、有効なリダイレクト URL ("リダイレクト エンドポイント") として認証サービスに登録できます。

たとえば、Fabrikam という開発元が、Contoso のサービスを利用する Windows ストア アプリを開発したとします。 Fabrikam は、開発中に Windows デベロッパー センターでアプリを登録し、一意の SID を取得しました。続けて Fabrikam は、アプリの SID を有効なリダイレクト URL として Contoso.com の認証サービスに登録しました。Fabrikam がリダイレクト URL として登録した SID は 2 つあり、その 1 つは "ms-app://S-1-5-4321" でした。

実行時に、Fabrikam の Windows ストア アプリは SSO モードで Web 認証ブローカーを呼び出します。Contoso.com では、要求の処理中に、リダイレクト URL が登録済み URL に含まれていることを確認します。Contoso がユーザーを認証すると、要求されたリダイレクト URL にアクセス トークンを追加した "ms- app://S-1-5-4321?token=ABC" にリダイレクトします。Web 認証ブローカーでこの形式の URL が検出され、呼び出し元アプリの SID と一致していることが確認されると、クエリ文字列またはポスト データに含まれていたトークンがアプリに返されます。

Cookie が既に SSO アプリ コンテナーに作成されていた場合は、ユーザーは Contoso にサインインする必要はありません。他のアプリが Fabrikam のアプリを偽装しようとしても失敗します。Contoso では要求された URL が登録済みのリダイレクト URL の 1 つであることを確認することでアプリの身元を検証しており、さらに Web 認証ブローカーによって、Contoso がリダイレクトしようとしているアプリと同じ SID を持つアプリのみがプロトコル データを取得できるためです。

Web 認証ブローカーに関するトラブルシューティング

Web 認証ブローカー API のトラブルシューティングを行うには、いくつかの方法があります。たとえば、操作ログを確認したり、Fiddler を使って Web 要求と応答を確認したりできます。

操作ログ

問題の原因の多くは、操作ログを使って特定できます。Web サイト開発者向けの専用のイベント ログ チャネルである Microsoft-Windows-WebAuth\Operational を使って、Web 認証ブローカーで Web ページが処理される過程を把握できます。これを有効にするには、eventvwr.exe を起動し、アプリケーションとサービス ログ\Microsoft\Windows\WebAuth で操作ログを有効にします。 また、Web 認証ブローカーは Web サーバー上で自身を識別するために、ユーザー エージェント文字列に一意の文字列を追加します。その文字列は、"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. 生成されたログ エントリを利用して、Web 認証ブローカーの動作を詳しく理解することができます。この例では、次の情報を知ることができます。
    • ナビゲーションの開始: AuthHost が開始された時点のログ。開始 URL と終了 URL に関する情報が含まれています。
    • ナビゲーションの開始
    • ナビゲーションの完了: Web ページの読み込み完了時のログ。
    • メタ タグ: メタ タグが検出されたときのログ。詳しい情報を含みます。
    • ナビゲーションの終了: ユーザーによってナビゲーションが終了されました。
    • ナビゲーション エラー: AuthHost が HttpStatusCode を含む URL でナビゲーション エラーを検出しました。
    • Navigation End (ナビゲーションの終了): 終了 URL が検出されました。

Web 認証ブローカーでの Fiddler の使用

Windows 8 アプリに対して、Fiddler Web デバッガーを使うことができます。

  1. AuthHost はプライベート ネットワーク機能を実現するために専用のアプリ コンテナー内で実行されるため、Windows Registry Editor Version 5.00 というレジストリ キーを設定する必要があります。

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

    •                      Data type
                           DWORD
  2. 送信トラフィックを生成するのは AuthHost なので、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 Web デバッガーの使用に関するブログ記事をご覧ください。

関連トピック

Web 認証ブローカー (オンライン プロバイダー向け)

Web 認証ブローカーのサンプル

Windows.Security.Authentication.Web