用户名客户端的消息安全

下面的示例演示了一个使用消息级安全进行保护的 Windows Communication Foundation (WCF) 服务和客户端。服务使用 X.509 证书进行身份验证。客户端使用用户名和密码进行身份验证。

有关示例应用程序,请参见Message Security User Name

使用用户名身份验证的消息安全

特征 说明

安全模式

消息

互操作性

仅限 Windows Communication Foundation (WCF)

身份验证(服务器)

初始协商需要服务器身份验证

身份验证(客户端)

用户名/密码

完整性

是,使用共享安全上下文

保密性

是,使用共享安全上下文

传输

HTTP

绑定

WSHttpBinding

服务

下面的代码和配置应单独运行。请执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。

代码

下面的代码演示如何创建使用消息安全的服务终结点。

配置

以下配置可代替代码使用:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceCredentialsBehavior">
          <serviceCredentials>
            <serviceCertificate findValue="Contoso.com" 
                                storeLocation="LocalMachine"
                                storeName="My"   
                                x509FindType="FindBySubjectName" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ServiceCredentialsBehavior"
               name="ServiceModel.Calculator">
        <endpoint address="https://localhost/Calculator"
                  binding="wsHttpBinding"
                  bindingConfiguration="MessageAndUserName"
                  name="SecuredByTransportEndpoint"
                  contract="ServiceModel.ICalculator" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="MessageAndUserName">
          <security mode="Message">            
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
  </system.serviceModel>
</configuration>

客户端

代码

下面的代码创建客户端。绑定设置为消息模式安全,客户端凭据类型设置为 UserName。用户名和密码只能使用代码指定(不可配置)。返回用户名和密码的代码未在此处显示,因为这必须在应用程序级完成。例如,使用 Window 窗体对话框查询用户以获得这些数据。

配置

下面的代码将配置客户端。绑定设置为消息模式安全,客户端凭据类型设置为 UserName。用户名和密码只能使用代码指定(不可配置)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://machineName/Calculator" 
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator" 
                contract="ICalculator"
                name="WSHttpBinding_ICalculator">
        <identity>
          <dns value ="Contoso.com" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

另请参见

概念

安全性概述
服务标识和身份验证

其他资源

Message Security User Name
<identity>