方法 : セキュリティで保護されたメタデータ エンドポイント
サービスのメタデータには、悪意のあるユーザーに利用される可能性がある、アプリケーションに関する機密情報が含まれています。また、サービスのコンシューマにも、サービスのメタデータを取得するためのセキュリティで保護された機構が必要です。したがって、状況に応じて、セキュリティで保護されたエンドポイントを使用してメタデータを公開する必要があります。
メタデータ エンドポイントは、一般に、アプリケーション エンドポイントをセキュリティで保護するために Windows Communication Foundation (WCF) に定義されている標準のセキュリティ機構を使用して保護されます (詳細な情報については、次のページを参照してください。 「セキュリティの概要」を参照してください)。
ここでは、SSL (Secure Sockets Layer) 証明書によって保護されたエンドポイント (つまり、HTTPS エンドポイント) を作成する手順を示します。
セキュリティで保護された HTTPS GET メタデータ エンドポイントをコードで作成するには
適切な X.509 証明書を使用してポートを構成します。この証明書は信頼された証明機関から発行され、かつ "サービス承認" の用途に使用される必要があります。証明書をポートに関連付けるには、HttpCfg.exe ツールを使用する必要があります。「方法 : SSL 証明書を使用してポートを構成する」を参照してください。
メモ : 証明書またはそのドメイン ネーム システム (DNS: Domain Name System) のサブジェクトが、コンピュータの名前と一致している必要があります。これは、HTTPS 機構が最初に実行する手順に、呼び出されたアドレスと同じ URI (Uniform Resource Identifier) に対して証明書が発行されているかどうかのチェックが含まれるために必要です。 ServiceMetadataBehavior クラスの新しいインスタンスを作成します。
ServiceMetadataBehavior クラスの HttpsGetEnabled プロパティを true に設定します。
HttpsGetUrl プロパティを適切な URL に設定します。絶対アドレスを指定する場合、URL は "https://" で開始する必要があります。相対アドレスを指定する場合は、サービス ホストに HTTPS ベースのアドレスを指定する必要があります。このプロパティが設定されていない場合、既定のアドレスは ""、またはサービスに HTTPS ベースのアドレスを直接指定したものになります。
作成したインスタンスを、ServiceDescription クラスの Behaviors プロパティから返される動作コレクションに追加します。コードは次のようになります。
セキュリティで保護された HTTPS GET メタデータ エンドポイントを構成で作成するには
サービスの構成ファイルで、<behaviors> 要素を <system.ServiceModel> 要素に追加します。
<serviceBehaviors> 要素を <Behaviors> 要素に追加します。
<behavior> of <serviceBehaviors> 要素を <serviceBehaviors> 要素に追加します。
<behavior> 要素の name 属性を適切な値に設定します。name 属性は必須です。下の例では、
mySvcBehavior
を値として使用しています。<serviceMetadata> Elementを <behavior> 要素に追加します。
<serviceMetadata> 要素の httpsGetEnabled 属性を true に設定します。
<serviceMetadata> 要素の httpsGetUrl 属性を適切な値に設定します。絶対アドレスを指定する場合、URL は "https://" で開始する必要があります。相対アドレスを指定する場合は、サービス ホストに HTTPS ベースのアドレスを指定する必要があります。このプロパティが設定されていない場合、既定のアドレスは ""、またはサービスに HTTPS ベースのアドレスを直接指定したものになります。
サービスで動作を使用するには、<service> 要素の behaviorConfiguration 属性を動作要素の名前属性の値に設定します。完全な構成コードを次の例に示します。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mySvcBehavior"> <serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://localhost:8036/calcMetadata" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="mySvcBehavior" name="Microsoft.Security.Samples.Calculator"> <endpoint address="https://localhost:8037/ServiceModelSamples/calculator" binding="wsHttpBinding" bindingConfiguration="" contract="Microsoft.Security.Samples.ICalculator" /> </service> </services> </system.serviceModel> </configuration>
例
次の例では、ServiceHost クラスのインスタンスを作成して、エンドポイントを追加します。次に、ServiceMetadataBehavior クラスのインスタンスを作成し、プロパティを設定してセキュリティで保護された Metadata Exchange ポイントを作成しています。
コードのコンパイル
このコード例では、次の名前空間を使用します。
関連項目
タスク
リファレンス
HttpsGetEnabled
ServiceMetadataBehavior
HttpsGetUrl
概念
証明書の使用
メタデータを使用する場合のセキュリティ上の考慮事項