エクスポート (0) 印刷
すべて展開

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

発行: 2011年4月

更新日: 2011年5月

適用対象: Windows Azure

適用の対象

  • Microsoft® Windows Azure™ AppFabric Access Control Service (ACS)

要約

このトピックでは、証明書利用者アプリケーションのカスタム エラー処理を実行するために必要な手順について説明します。エラー URL を使用すると、ACS によって生成されたエラーを証明書利用者アプリケーションに送り、証明書利用者アプリケーションで必要に応じて処理できます。たとえば、証明書利用者アプリケーションが ASP.NET Web サイトである場合、エラー URL 機能を使用して、Web サイトの他の部分と同じ外観を備えた具体的なメッセージをエンド ユーザーに提供できます。また、詳しい分析のためにエラーをログに記録することもできます。

内容

  • 目的

  • 概要

  • 手順の概要

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

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

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

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

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

目的

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

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

  • 潜在的な問題を指摘し、トラブルシューティングを行います。

概要

ログオン プロセスでエラーが発生した場合に ACS がユーザーをリダイレクトする場所を定義するエラー URL を設定できます (たとえば、http://www.fabrikam.com/billing/error.aspx)。リダイレクト先は、通常は証明書利用者アプリケーションでホストされるカスタム エラー ページです。リダイレクトの一部として、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 cancelled by the user."}]}

手順の概要

ACS からのエラー メッセージを処理するには、次の手順を実行する必要があります。

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

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

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

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

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

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

証明書利用者に対してエラー URL 機能を有効にするには

  1. http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428) にログオンします。

  2. [プロジェクト] ページで、プロジェクトをクリックします。

  3. [プロジェクト:<<プロジェクト>>] ページで、目的の名前空間の [アクセス制御] リンクをクリックします。

  4. [アクセス制御設定: <<名前空間>>] ページで、[アクセス制御の管理] リンクをクリックします。

  5. [Access Control Service] ページで、[証明書利用者アプリケーション] リンクをクリックします。

  6. [証明書利用者アプリケーション] ページで、証明書利用者アプリケーションをクリックします。

  7. [証明書利用者アプリケーションの編集] ページで、[証明書利用者アプリケーションの詳細] セクションの [エラー URL] フィールドをメモします。

  8. エラー ページの URL を入力します。このエラー ページは、エラーの詳細情報を含む JSON URL エンコード形式のパラメーターを受信するページです。

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

この手順では、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 からのエラー メッセージを処理するときに使用します。

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

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

ACS によって生成される JSON エンコード形式のエラー メッセージを処理するには

  1. ASP.NET アプリケーションに aspx Web ページを追加し、ErrorPage.aspx などの名前を付けます。このページは、ACS から送信される JSON エンコード形式のエラー メッセージを処理するエラー ページとして機能します。

  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 エンコード形式のエラー メッセージの処理を担います。

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

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

noteメモ
エラー ページには匿名でアクセスすることができ、またエラー ページには HTML をエコー バックしたりデータベースにデータを書き込んだりするコードが含まれる場合があるため、クロスサイト スクリプティング攻撃や SQL インジェクション攻撃を確実に防ぐ必要があります。これについては次のリソースで詳しく説明しています。

エラー ページへの匿名アクセスを構成するには

  • web.config を開き、次のエントリを追加します。

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

    これにより、ページで無限リダイレクト ループが発生しなくなります。

手順 5 - 作業をテストする

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

証明書利用者に対してエラー URL 機能を有効にするには

  1. http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428) にログオンします。

  2. [プロジェクト] ページで、プロジェクトをクリックします。

  3. [プロジェクト:<<プロジェクト>>] ページで、目的の名前空間の [アクセス制御] リンクをクリックします。

  4. [アクセス制御設定: <<名前空間>>] ページで、[アクセス制御の管理] リンクをクリックします。

  5. [Access Control Service] ページで、[規則グループ] リンクをクリックします。

  6. [規則グループ] ページで、証明書利用者に関連付けられている規則グループをクリックします。

    Warning警告
    この手順は元に戻せません。ただし、生成された規則を削除している場合は、簡単に再生成できます。[規則グループの編集] ページで、すべての規則を削除します。すべての規則を削除するには、[規則] セクションですべての規則を選択し、[選択された規則の削除] リンクをクリックします。

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

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

  9. 認証を行うために、証明書利用者に対して構成されている ID プロバイダー (Windows Live ID、Google、Facebook、Yahoo!、または AD FS 2.0) にリダイレクトされます。

  10. 認証に成功すると、ACS に戻ります。規則が定義されていないため、ここでエラーが生成されます。

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

    uri:WindowsLiveID エラー コード ACS50000:トークンの発行でエラーが発生しました。

もう 1 つのテスト方法は、ユーザー同意に応じないことです。ユーザー同意は、Facebook または Google を使用してログオンするときに表示されます。

表示:
© 2014 Microsoft