方法 : カスタム クライアント ID 検証機能を作成する

Windows Communication Foundation (WCF) の ID 機能を使用すると、クライアントで、予想されるサービスの ID を事前に指定できます。サーバーがクライアントに対して自身を認証するたびに、ID がこの予想 ID と照合されます(ID とその機能の詳細については、「サービス ID と認証」を参照してください)。

必要に応じて、カスタム ID 検証機能を使用して検証をカスタマイズできます。たとえば、追加のサービス ID 検証チェックを実行できます。この例では、カスタム ID 検証機能で、サーバーから戻された X.509 証明書の追加のクレームをチェックします。サンプル アプリケーションについては、「Identity」を参照してください。

EndpointIdentity クラスを拡張するには

  1. EndpointIdentity クラスから派生する新しいクラスを定義します。拡張子 OrgEndpointIdentity に名前を付ける例を次に示します。

  2. 拡張 IdentityVerifier クラスで使用するプライベート メンバとプロパティを追加し、サービスによって返されたセキュリティ トークンのクレームに対して ID チェックを実行します。この例では、OrganizationClaim プロパティを定義します。

IdentityVerifier クラスを拡張するには

  1. IdentityVerifier から派生する新しいクラスを定義します。拡張子 CustomIdentityVerifier に名前を付ける例を次に示します。

  2. CheckAccess メソッドをオーバーライドします。このメソッドは、ID チェックが成功したか失敗したかを判定します。

  3. CheckAccess メソッドには 2 つのパラメータがあります。1 つ目は EndpointIdentity クラスのインスタンスです。2 つ目は AuthorizationContext クラスのインスタンスです。

    メソッド実装では、AuthorizationContext クラスの ClaimSets プロパティから返されたクレームのコレクションを検査し、必要に応じて認証チェックを実行します。この例では、まず種類が "識別名" のクレームをすべて検索し、次にその名前と EndpointIdentity の拡張 (OrgEndpointIdentity) とを比較します。

TryGetIdentity メソッドを実装するには

  1. TryGetIdentity メソッドを実装します。このメソッドは、クライアントが EndpointIdentity クラスのインスタンスを返すことができるかどうかを判定します。WCF インフラストラクチャは、まず TryGetIdentity メソッドの実装を呼び出して、メッセージからサービスの ID を取得します。次に、インフラストラクチャは、返された EndpointIdentityAuthorizationContext を使用して CheckAccess 実装を呼び出します。

  2. TryGetIdentity メソッドに次のコードを追加します。

カスタム バインディングを実装してカスタム ID 検証機能を設定するには

  1. Binding オブジェクトを返すメソッドを作成します。この例は、まず WSHttpBinding クラスのインスタンスを作成し、そのセキュリティ モードを MessageClientCredentialTypeNone に設定します。

  2. CreateBindingElements メソッドを使用して BindingElementCollection を作成します。

  3. コレクションから SecurityBindingElement を返し、それを SymmetricSecurityBindingElement 変数にキャストします。

  4. LocalClientSecuritySettings クラスの IdentityVerifier プロパティを、以前作成した CustomIdentityVerifier クラスの新しいインスタンスに設定します。

  5. 返されたカスタム バインディングを使用してクライアントのインスタンスとクラスを作成します。これにより、クライアントは、次のコードに示すようにサービスのカスタム ID 検証チェックを実行できるようになります。

IdentityVerifier クラスの完全な実装方法の例を次に示します。

EndpointIdentity クラスの完全な実装方法の例を次に示します。

関連項目

リファレンス

ServiceAuthorizationManager
EndpointIdentity
IdentityVerifier

その他の技術情報

Identity Sample
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample