次の方法で共有


メッセージ資格情報付き WS トランスポート

このサンプルでは、メッセージで送信されるクライアント資格情報と組み合わせて SSL トランスポート セキュリティを使用する方法を示します。 このサンプルでは、 wsHttpBinding バインドを使用します。

既定では、 wsHttpBinding バインディングは HTTP 通信を提供します。 トランスポート セキュリティ用に構成されている場合、バインディングは HTTPS 通信をサポートします。 HTTPS は、ネットワーク経由で送信されるメッセージの機密性と整合性の保護を提供します。 ただし、サービスに対するクライアントの認証に使用できる認証メカニズムのセットは、HTTPS トランスポートでサポートされるものに制限されます。 Windows Communication Foundation (WCF) には、この制限を克服するために設計された TransportWithMessageCredential セキュリティ モードが用意されています。 このセキュリティ モードを構成すると、転送されたメッセージの機密性と整合性を提供し、サービス認証を実行するためにトランスポート セキュリティが使用されます。 ただし、クライアント認証は、クライアント資格情報をメッセージに直接入れることによって実行されます。 これにより、トランスポート セキュリティ モードのパフォーマンス上の利点を維持しながら、クライアント認証のメッセージ セキュリティ モードでサポートされている任意の資格情報の種類を使用できます。

このサンプルでは、 UserName 資格情報の種類を使用して、サービスに対するクライアントの認証を行います。

このサンプルは、電卓サービスを実装する 作業の開始 に基づいています。 wsHttpBinding バインディングは、クライアントとサービスのアプリケーション構成ファイルで指定および構成されます。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

サンプルのプログラム コードは、 作業の開始 サービスとほぼ同じです。 サービス コントラクトによって 1 つの追加操作 ( GetCallerIdentity) が提供されます。 この操作は、呼び出し元の 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: アドレス ( https://localhost/servicemodelsamples/service.svc など) にアクセスしようとすると、セキュリティ アラートが表示されます。 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.

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. インターネット インフォメーション サービス (IIS) サーバー証明書のインストール手順を実行していることを確認します。

  3. ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  4. 単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。