方法 : クレームを比較する
Windows Communication Foundation (WCF) 内の識別モデル インフラストラクチャを使用して、承認確認を実行します。この場合、一般的なタスクとして、承認コンテキスト内のクレームが、要求されたアクションの実行や要求されたリソースへのアクセスに必要とされるクレームと比較されます。このトピックでは、組み込みとカスタム クレームの型を含め、クレームの比較方法について説明します。識別モデル インフラストラクチャの詳細については、「ID モデルを使用したクレームと承認の管理」を参照してください。
クレームの比較では、クレーム間で 3 つの部分 (型、権限、およびリソース) の比較が行われ、等しいかどうかが判断されます。たとえば、次の 2 つの Name
クレームがあるとします。
いずれのクレームにも、クレームの型として Name、権限として PossessProperty、および文字列リソースとして "someone" が設定されています。クレームの 3 つの部分のすべてが等しいため、この 2 つのクレームは等しくなります。
組み込みのクレームの型の比較には、Equals メソッドを使用します。必要に応じて、クレーム固有の比較コードが使用されます。たとえば、次の 2 つのユーザー プリンシパル名 (UPN) クレームがあるとします。
example\someone
が "someone@example.com" と同じドメイン ユーザーを示すと仮定する場合、Equals メソッド内の比較コードは true を返します。
カスタム クレームの型の比較にも、Equals メソッドを使用できます。ただし、クレームの Resource プロパティから返された種類がプリミティブ型と一致しない場合は、Resource プロパティから返された値が Equals メソッドごとに等しいときだけ、Equals によって true が返されます。これに該当しない場合は、Resource プロパティから返されたカスタム型で Equals メソッドと GetHashCode メソッドを上書きし、必要なカスタム処理を実行する必要があります。
組み込みのクレームの比較
- Claim クラスの 2 つのインスタンスがある場合、次に示すコードのように、Equals を使用して比較します。
カスタム クレームとプリミティブ リソース型の比較
プリミティブ リソース型を含むカスタム クレームでは、次のコードのように、組み込みのクレームとして比較を実行できます。
構造体またはクラスをベースとしたリソース型を含むカスタム クレームでは、そのリソース型で Equals メソッドを上書きする必要があります。
まず、obj パラメータが null であるかどうかを確認し、null である場合は false を返します。
次に、パラメータとして this と obj を渡して ReferenceEquals を呼び出します。true が返されたら、true を返します。
さらに、obj をクラスの型のローカル変数に割り当てます。この処理が失敗すると、参照が null になります。この場合、false が返されます。
現在のクレームと提供されたクレームを正しく比較するために必要なカスタム比較を実行します。
例
次の例では、クレームの型がプリミティブ型以外のカスタム クレームを比較します。