方法:エラー URL をカスタム エラー処理に使用する
TOC
目次を折りたたむ
目次を展開する
ドキュメントはアーカイブされており、ここに掲載されている情報は古くなっている可能性があります

方法:エラー URL をカスタム エラー処理に使用する

発行: 2011年4月

更新日: 2015年6月

適用対象: Azure

  • Microsoft Azure Active Directory アクセス制御 (アクセス制御サービスまたは ACS)

このトピックでは、エラー URL 機能を使用して、証明書利用者アプリケーションにカスタム ログイン エラー処理を実装する方法について説明します。エラー URL を使用して、ACS が生成するエラーを証明書利用者アプリケーションに返送して、アプリケーションがエラーを記録し、応答できるようにすることができます。たとえば、ASP.NET Web サイトはエラー URL 機能を使用して、Web サイトと同じ外観でブランド化されたエラー メッセージをユーザーに表示できます。

  • 目標

  • 概要

  • 手順の概要

  • 手順 1 – エラー URL 機能を有効にする

  • 手順 2 – エラー ヘルパー クラスを作成する

  • 手順 3 - JSON でエンコードされたエラー メッセージを処理する

  • 手順 4 - エラー ページへの匿名アクセスを構成する

  • 手順 5 – 作業をテストする

  • エラー URL 機能を使用するために必要な構成を特定します。

  • ACS からのエラー メッセージを処理するために必要なヘルパー コードを特定します。

  • 潜在的な落とし穴を特定し、トラブルシューティングを行います。

エラー URL は、ログイン プロセス中にエラーが発生した場合に ACS がユーザーをリダイレクトする Web アドレスを指定します。エラー URL ターゲットは一般に証明書利用者アプリケーションによってホストされるカスタム エラー ページです。ACS は、リダイレクトの一部として、JSON でエンコードされた HTTP URL パラメーターとして、証明書利用者アプリケーションにエラーに関する情報を返します。カスタム エラー ページに JSON でエンコードされたエラー情報を含めたり、静的なヘルプ テキストを表示したりすることができます。次に、JSON でエンコードされたエラー メッセージの例を示します。

{"context":null,"httpReturnCode":401,"identityProvider":"Google","timeStamp":"2010-12-17 21:01:36Z","traceId":"16bba464-03b9-48c6-a248-9d16747b1515","errors":[{"errorCode":"ACS30000","errorMessage":"There was an error processing an OpenID sign-in response."},{"errorCode":"ACS50019","errorMessage":"Sign-in was canceled by the user."}]}

以下のプロセスを使用して、ACS エラー メッセージを処理します。

  • 手順 1 – エラー URL 機能を有効にする

  • 手順 2 – エラー ヘルパー クラスを作成する

  • 手順 3 - JSON でエンコードされたエラー メッセージを処理する

  • 手順 4 - エラー ページへの匿名アクセスを構成する

  • 手順 5 – 作業をテストする

  1. Microsoft Azure 管理ポータル (https://manage.WindowsAzure.com) に移動してサインインし、[Active Directory] をクリックします。(トラブルシューティングのヒント:"Active Directory" 項目が見つからないか、使用できません)

  2. アクセス制御名前空間を管理するには、名前空間をクリックしてしてから [管理] をクリックします。または、[アクセス制御名前空間] をクリックして名前空間を選択し、[管理] をクリックします。

  3. [証明書利用者アプリケーション] をクリックして、証明書利用者アプリケーションを選択します。

  4. [証明書利用者アプリケーションの編集] ページで、[エラー URL] フィールドにエラー ページ URL を入力します。

    ACS はログイン エラーの発生時にユーザーをこのページにリダイレクトします。さらに、ACS は JSON URL でエンコードされたパラメーターを、エラーの詳細を含むこのページに送信します。

この手順では、JSON でエンコードされたエラー メッセージのシリアル化を解除するエラー ヘルパー クラスを作成します。

  1. Web アプリケーションにクラス ファイルを追加し、それに Error.cs などの名前を指定します。

  2. 次のように、Error クラスを実装します。

    public class Error
    {
        public string errorCode { get; set; }
        public string errorMessage { get; set; }
    }
    
    

    別のクラス ファイルを追加し、それに ErrorDetails.cs などの名前を指定します。

  3. 次のように、ErrorDetails クラスを実装します。

    public class ErrorDetails
    {
        public string context { get; set; }
        public int httpReturnCode { get; set; }
        public string identityProvider { get; set; }
        public Error[] errors { get; set; }
    }
    

これらのクラスは、ACS からのエラー メッセージの処理時に、次の手順で使用します。

この手順では、ACS によって生成される JSON エンコードされたエラー メッセージを処理する方法を示します。

  1. ASP.NET アプリケーションに ASPX Web ページを追加し、それに ErrorPage.aspx などの名前を指定します。

  2. 次のラベル コントロールを ASP.NET マークアップに追加します。

    <asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> 
    <asp:Label ID="lblErrorMessage" runat="server"></asp:Label> 
    
    
  3. ページの分離コード ファイル ErrorPge.aspx.cs に切り替えます。

  4. 次の宣言を上部に追加します。

    using System.Web.Script.Serialization;
    
    
  5. 次のコードを Page_Load メソッドに追加します。

    JavaScriptSerializer serializer = new JavaScriptSerializer(); ErrorDetails error = serializer.Deserialize<ErrorDetails>( 
    
    
                                         Request["ErrorDetails"] ); lblErrorMessage.Text = string.Join("<br/>", 
                                        error.errors.Select(er => string.Format("Error Code {0}: {1}", 
                                        er.errorCode, er.errorMessage)).ToArray());
    
    
    
    

    このコードは、ACS からの JSON でエンコードされたエラー メッセージを処理します。

この手順では ErrorPage.aspx ファイルへの匿名アクセスを構成します。ページが保護されており、承認が必要な場合は、無限のリダイレクト ループになります。ACS がページへのアクセスを試みた場合にこれが発生すると、ACS は JSON でエンコードされたエラーを送信します。

noteメモ
エラー ページは匿名でアクセスでき、HTML をエコーしたり、データをデータベースに書き込むコードが含まれる可能性があるため、クロスサイト スクリプトや SQL インジェクション攻撃を防止するようにする必要があります。次のリソースでは、これについて詳しく説明します。

  • アプリケーションで web.config を開き、次のエントリを追加します。

    <location path="ErrorPage.aspx">
      <system.web>
        <authorization>
          <allow users="*" />
        </authorization>
      </system.web>
    </location>
    

    これにより、ページへのアクセスによって、無限のリダイレクト ループが発生しません。

この手順では、エラー URL の構成と実装をテストします。

  1. Microsoft Azure 管理ポータル (https://manage.WindowsAzure.com) に移動してサインインし、[Active Directory] をクリックします。(トラブルシューティングのヒント:"Active Directory" 項目が見つからないか、使用できません)

  2. アクセス制御名前空間を管理するには、名前空間をクリックしてしてから [管理] をクリックします。または、[アクセス制御名前空間] をクリックして名前空間を選択し、[管理] をクリックします。

  3. [ルール グループ] をクリックし、証明書利用者アプリケーションに関連付けられているルール グループをクリックします。

  4. Warning警告
    次の手順は元に戻すことができません。ただし、生成されたルールを削除すれば、それらを簡単に再度生成できます。

  5. [ルール グループの編集] ページで、[ルール] セクションのすべてのルールを選択し、[選択されたルールの削除] をクリックします。

  6. [保存] をクリックします。

  7. ブラウザーを使用して、Web サイトに戻り、いずれかのページに移動します。

  8. 証明書利用者アプリケーションに構成されている ID プロバイダーに関係なく、認証のために、ID プロバイダー (Windows Live ID (Microsoft アカウント)、Google、Facebook、Yahoo!、または ) にリダイレクトされる必要があります。

  9. 認証が成功したら、ACS に再びリダイレクトされる必要があり、これによって、ルールが定義されていないため、エラーが生成されるはずです。

  10. このエラーは、手順 2 – エラー ヘルパー クラスを作成する に作成したエラー ページに表示されるはずであり、次のようになります。

    uri:WindowsLiveID Error Code ACS50000:There was an error issuing a token.

これをテストする別の方法は、ユーザーの同意を拒否することです。これは、Facebook や Google を使用してログインした際に表示されます。

表示:
© 2016 Microsoft