メッセージ資格情報付き WS トランスポート
このサンプルでは、メッセージに含まれるクライアント資格情報と組み合わせて SSL トランスポート セキュリティを使用する例を示します。 このサンプルでは、wsHttpBinding
バインディングを使用します。
既定で、wsHttpBinding
バインディングは HTTP 通信を実現します。 トランスポート セキュリティ用に構成すると、バインディングは HTTPS 通信をサポートします。 HTTPS により、通信回線を介して送信されるメッセージについての機密性および整合性の保護が実現します。 ただし、サービスに対するクライアントの認証に使用できる一連の認証機構は、HTTPS トランスポートのサポート範囲に限定されます。 Windows Communication Foundation (WCF) は、この制限を逃れるために設計された TransportWithMessageCredential
セキュリティ モードを備えています。 このセキュリティ モードが構成されると、送信メッセージの機密性および整合性を実現してサービス認証を実行する、トランスポート セキュリティが使用されます。 ただし、クライアント認証は、クライアントの資格情報をメッセージに直接入れることで実行されます。 それにより、クライアント認証のメッセージ セキュリティ モードでサポートされているあらゆる種類の資格情報を利用しつつ、トランスポート セキュリティ モードのパフォーマンス上のベネフィットを維持できます。
このサンプルでは、サービスに対するクライアントの認証に UserName
資格情報が使用されます。
このサンプルは、電卓サービスを実装する「入門サンプル」に基づいています。 wsHttpBinding
バインディングは、クライアントとサービスのアプリケーション構成ファイルに指定され、構成されます。
Note
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。
このサンプル内のプログラム コードは、「入門サンプル」サービスのものとほとんど同じです。 GetCallerIdentity
サービス コントラクトによって追加された操作が 1 つあります。 この操作は、呼び出し元の ID の名前を呼び出し元に返します。
public string GetCallerIdentity()
{
// Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.
return ServiceSecurityContext.Current.WindowsIdentity.Name;
}
このサンプルをビルドして実行する前に、証明書を作成し、Web サーバー証明書ウィザードを使用してあらかじめ割り当てておく必要があります。 次に示すクライアント用構成の例のように、構成ファイル設定でエンドポイントとバインディングを定義すると、TransportWithMessageCredential
セキュリティ モードが有効になります。
<system.serviceModel>
<client>
<endpoint name=""
address="https://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as TransportWithMessageCredential.
and the clientCredentialType as UserName.
-->
<binding name="Binding1">
<security mode ="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
アドレス指定では https://
スキームを使用しています。 このバインド構成により、セキュリティ モードが TransportWithMessageCredential
に設定されます。 同じセキュリティ モードが、サービスの Web.config ファイルで指定される必要があります。
このサンプルで使用する証明書は Makecert.exe で作成されたテスト証明書なので、ブラウザーで https://localhost/servicemodelsamples/service.svc
のような HTTPS アドレスにアクセスしようとするとセキュリティ警告が表示されます。 WCF クライアントがテスト証明書に対して問題なく動作するようにするには、クライアントにコードを追加して、セキュリティ アラートを非表示にする必要があります。 そのためのコードとそれに必要なクラスは、本運用の証明書を使用するときには不要です。
// WARNING: This code is only needed for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");
このサンプルを実行すると、操作要求および応答がクライアントのコンソール ウィンドウに表示されます。 クライアントをシャットダウンするには、クライアント ウィンドウで Enter キーを押します。
Username authentication required.
Provide a valid machine or domain account. [domain\\user]
Enter username:
YourDomainName\YourAccountName
Enter password:
********
YourDomainName\YourAccountName
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
サンプルをセットアップ、ビルド、および実行するには
Windows Communication Foundation サンプルの 1 回限りのセットアップの手順を実行したことを確認します。
インターネット インフォメーション サービス (IIS) サーバー証明書インストール手順を実行していることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。
単一または複数コンピューター構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。