次の方法で共有


クライアント検証

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

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

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

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

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

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

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

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

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

  4. クライアントとサービスが通信できない場合は、「WCF サンプルのトラブルシューティングのヒント」を参照してください。

  5. サンプルが完了したら、Cleanup.bat を実行して証明書を削除します。 他のセキュリティ サンプルでは、同じ証明書が使用されます。

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

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

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

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

  4. クライアントで、管理者特権で Visual Studio の開発者コマンド プロンプトを開き、「 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. クライアントとサービスが通信できない場合は、「WCF サンプルのトラブルシューティングのヒント」を参照してください。

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

  • サンプルの実行が完了したら、samples フォルダーで Cleanup.bat を実行します。

    このスクリプトは、コンピューター間でこのサンプルを実行するときに、クライアント上のサービス証明書を削除しません。 コンピューター間で証明書を使用する WCF サンプルを実行している場合は、CurrentUser - TrustedPeople ストアにインストールされているサービス証明書を必ずクリアしてください。 これを行うには、次のコマンドを使用します: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com

こちらも参照ください