方法: カスタム エラー処理にエラー URL を使用する
更新日: 2015 年 6 月 19 日
適用先: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 – エラー URL 機能を有効にする
証明書利用者のエラー URL 機能を有効にするには
Microsoft Azure管理ポータル (https://manage.WindowsAzure.com) に移動し、サインインし、[Active Directory] をクリックします。 (トラブルシューティングのヒント: "Active Directory" 項目が見つからないか、使用できません)
アクセス制御名前空間を管理するには、名前空間をクリックしてしてから [管理] をクリックします。 または、[アクセス制御名前空間] をクリックして名前空間を選択し、[管理] をクリックします。
[証明書利用者アプリケーション] をクリックして、証明書利用者アプリケーションを選択します。
[証明書利用者アプリケーションの編集] ページで、[エラー URL] フィールドにエラー ページ URL を入力します。
ログイン エラーが発生すると、ACS はユーザーをこのページにリダイレクトします。 また、ACS は、エラーの詳細を含む JSON URL でエンコードされたパラメーターをこのページに送信します。
手順 2 – エラー ヘルパー クラスを作成する
この手順では、JSON でエンコードされたエラー メッセージのシリアル化を解除するエラー ヘルパー クラスを作成します。
エラー ヘルパー クラスを作成するには
Web アプリケーションにクラス ファイルを追加し、それに Error.cs などの名前を指定します。
次のように、Error クラスを実装します。
public class Error { public string errorCode { get; set; } public string errorMessage { get; set; } }
別のクラス ファイルを追加し、 ErrorDetails.cs などの名前を付けます。
次のように、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 でエンコードされたエラー メッセージを処理するには
ASP.NET アプリケーションに ASPX Web ページを追加し、それに ErrorPage.aspx などの名前を指定します。
次のラベル コントロールを ASP.NET マークアップに追加します。
<asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> <asp:Label ID="lblErrorMessage" runat="server"></asp:Label>
ページの分離コード ファイル ErrorPge.aspx.cs に切り替えます。
次の宣言を上部に追加します。
using System.Web.Script.Serialization;
次のコードを 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 がページにアクセスしようとしたときにこれが発生した場合、ACS は JSON でエンコードされたエラーを送信します。
注意
エラー ページは匿名でアクセスでき、HTML をエコーしたり、データをデータベースに書き込むコードが含まれる可能性があるため、クロスサイト スクリプトや SQL インジェクション攻撃を防止するようにする必要があります。 次のリソースでは、これについて詳しく説明します。
-
方法: ASP.NET でのクロスサイト スクリプティングを禁止する (https://go.microsoft.com/fwlink/?LinkID=178708).
-
方法: ASP.NET のインジェクション攻撃から保護する (https://go.microsoft.com/fwlink/?LinkID=157572).
-
方法: ASP.NET のSQLインジェクションから保護するhttps://go.microsoft.com/fwlink/?LinkID=212978.
エラー ページへの匿名アクセスを構成するには
アプリケーションで web.config を開き、次のエントリを追加します。
<location path="ErrorPage.aspx"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
これにより、ページへのアクセスによって、無限のリダイレクト ループが発生しません。
手順 5 – 作業をテストする
この手順では、エラー URL の構成と実装をテストします。
証明書利用者のエラー URL 機能を有効にするには
Microsoft Azure管理ポータル (https://manage.WindowsAzure.com) に移動し、サインインし、[Active Directory] をクリックします。 (トラブルシューティングのヒント: "Active Directory" 項目が見つからないか、使用できません)
アクセス制御名前空間を管理するには、名前空間をクリックしてしてから [管理] をクリックします。 または、[アクセス制御名前空間] をクリックして名前空間を選択し、[管理] をクリックします。
[ルール グループ] をクリックし、証明書利用者アプリケーションに関連付けられているルール グループをクリックします。
-
警告
次の手順は元に戻すことができません。 ただし、生成されたルールを削除すれば、それらを簡単に再度生成できます。
[ルール グループの編集] ページで、[ルール] セクションのすべてのルールを選択し、[選択されたルールの削除] をクリックします。
[保存] をクリックします。
ブラウザーを使用して、Web サイトに戻り、いずれかのページに移動します。
認証のために ID プロバイダーにリダイレクトする必要があります (Windows Live ID (Microsoft アカウント)、Google、Facebook、Yahoo!、または証明書利用者用に ID プロバイダーとして構成されているもの)。
認証が成功した後、ACS にリダイレクトされます。ルールが定義されていないため、エラーが生成されます。
このエラーは、「手順 2 - エラー ヘルパー クラスの作成」で作成したエラー ページに表示され、次のようになります。
uri:WindowsLiveID エラー コード ACS50000: トークンの発行中にエラーが発生しました。
これをテストする別の方法は、ユーザーの同意を拒否することです。 これは、Facebook や Google を使用してログインした際に表示されます。