次の方法で共有


クライアント検証

サービスは頻繁にメタデータを公開し、クライアント プロキシの型を自動的に生成して構成できるようにします。サービスが信頼できない場合、クライアント アプリケーションでは、セキュリティ、トランザクション、サービス コントラクトの型などに関して、メタデータがクライアント アプリケーションのポリシーに合致しているかどうか検証する必要があります。次のサンプルでは、サービス エンドポイントを検証するクライアント エンドポイントの動作を記述して、サービス エンドポイントを安全に使用できることを確認する方法を示します。

サービスは 4 つのサービス エンドポイントを公開します。1 つ目は WSDualHttpBinding を使用するエンドポイント、2 つ目は NTLM 認証を使用するエンドポイント、3 つ目はトランザクション フローを有効にするエンドポイント、4 つ目は証明書ベースの認証を使用するエンドポイントです。

クライアントは MetadataResolver クラスを使用してサービスのメタデータを取得します。クライアントは検証動作を使用して、二重バインディング、NTLM 認証、およびトランザクション フローを禁止するポリシーを適用します。クライアント アプリケーションは、サービスのメタデータからインポートされた ServiceEndpoint インスタンスごとに InternetClientValidatorBehavior エンドポイント動作のインスタンスを ServiceEndpoint に追加し、その後 Windows Communication Foundation (WCF) クライアントを使用してエンドポイントへの接続を試行します。動作の Validate メソッドはサービスで操作が呼び出される前に実行され、InvalidOperationExceptions をスローすることによってクライアントのポリシーを適用します。

サンプルをビルドするには

  1. ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

サンプルを同じコンピューターで実行するには

  1. 管理者特権を使用して Visual Studio コマンド プロンプトを開き、サンプルのインストール フォルダーから Setup.bat を実行します。これにより、サンプルの実行に必要なすべての証明書がインストールされます。

  2. サービス アプリケーションを \service\bin\Debug で実行します。

  3. クライアント アプリケーションを \client\bin\Debug で実行します。クライアント アクティビティがクライアントのコンソール アプリケーションに表示されます。

  4. クライアントとサービス間で通信できない場合は、「Troubleshooting Tips」を参照してください。

  5. サンプルの使用が終わったら、Cleanup.bat を実行して証明書を削除してください。他のセキュリティ サンプルでも同じ証明書を使用します。

サンプルを複数のコンピューターで実行するには

  1. サーバー上で、管理者特権を使用して Visual Studio コマンド プロンプトを実行し、「setup.bat service」と入力します。setup.bat service 引数を指定して実行すると、コンピューターの完全修飾ドメイン名を使用してサービス証明書が作成され、Service.cer というファイルにエクスポートされます。

  2. サーバーで、App.config を編集して新しい証明書の名前を反映します。つまり、<serviceCertificate> of <serviceCredentials> Element 要素の findValue 属性をコンピューターの完全修飾ドメイン名に変更します。

  3. Service.cer ファイルを、サービス ディレクトリからクライアント コンピューターのクライアント ディレクトリにコピーします。

  4. クライアント上で、管理者特権を使用して Visual Studio 2010 コマンド プロンプトを開き、「setup.bat client」と入力します。setup.bat client 引数を指定して実行すると、Client.com というクライアント証明書が作成され、Client.cer というファイルにエクスポートされます。

  5. client.cs ファイルで、MEX エンドポイントと、既定のサーバー証明書を設定するための findValue のアドレス値を、サービスの新しいアドレスに合わせて変更します。そのためには、localhost をサーバーの完全修飾ドメイン名に置き換えます。再ビルドします。

  6. Client.cer ファイルを、クライアント ディレクトリからサーバーのサービス ディレクトリにコピーします。

  7. クライアント上で、管理者特権を使用して Visual Studio コマンド プロンプトを開き、ImportServiceCert.bat を実行します。これにより、サービス証明書が Service.cer ファイルから CurrentUser - TrustedPeople ストアにインポートされます。

  8. サーバー上で、管理者特権を使用して Visual Studio コマンド プロンプトを開き、ImportClientCert.bat を実行します。これにより、クライアント証明書が Client.cer ファイルから LocalMachine - TrustedPeople ストアにインポートされます。

  9. サービス コンピューターの Visual Studio でサービス プロジェクトをビルドし、service.exe を実行します。

  10. クライアント コンピューターで、client.exe を実行します。

    1. クライアントとサービス間で通信できない場合は、「Troubleshooting Tips」を参照してください。

サンプルの実行後にクリーンアップするには

  • サンプルの実行が終わったら、サンプル フォルダにある Cleanup.bat を実行します。

    Aa717051.note(ja-jp,VS.100).gif注 :
    このサンプルを複数のコンピューターで実行している場合、このスクリプトはサービス証明書をクライアントから削除しません。複数のコンピューターで証明書を使用する WCF サンプルを実行した場合は、CurrentUser - TrustedPeople ストアにインストールされたサービス証明書を忘れずに削除してください。削除するには、コマンド certmgr -del -r CurrentUser -s TrustedPeople -c -n <サーバー コンピューターの完全修飾名>を実行します。たとえば、"certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com" となります。

参照

概念

メタデータを使用する