WS 2007 联合 HTTP 绑定

此示例演示 WS2007FederationHttpBinding 的用法,它是一个标准绑定,可用来生成支持 1.3 版 WS-Trust 规范的联合方案。

提示

此示例需要安装 .NET Framework 3.5 版才能生成和运行。若要打开项目和解决方案文件,需要使用 Visual Studio 2008。

提示

本主题的末尾介绍了此示例的设置过程和生成说明。

此示例由基于控制台的客户端程序 (Client.exe)、基于控制台的安全令牌服务程序 (Securitytokenservice.exe) 和基于控制台的服务程序 (Service.exe) 组成。服务实现用来定义“请求/答复”通信模式的协定。该协定由 ICalculator 接口定义,此接口公开数学运算(AddSubtractMultiplyDivide)。客户端从安全令牌服务 (STS) 获取安全令牌,向服务发出同步请求,以进行给定数学运算。服务使用结果进行回复。客户端活动显示在控制台窗口中。

此示例使用 ws2007FederationHttpBinding 元素提供 ICalculator 协定。下面的代码演示了此绑定在客户端上的配置。

    <bindings>
      <ws2007FederationHttpBinding>
        <binding name="ServiceFed" >
          <security mode ="Message">
            <message issuedKeyType ="SymmetricKey"
                     issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
              <!-- Endpoint address and binding for Security Token Service -->
              <issuer address ="https://localhost:8000/sts/windows" 
                      binding ="ws2007HttpBinding" />              
            </message>
          </security>
        </binding>
      </ws2007FederationHttpBinding>
    </bindings>

<security> element of <ws2007FederationHttpBinding>上,security 值指定应当使用哪种安全模式。此示例中使用的是 message 安全性,这也是在 <security> element中指定 <message> element of <ws2007FederationHttpBinding> 的原因。<message> element of <ws2007FederationHttpBinding>内的 <issuer> 元素针对向客户端颁发安全令牌的 STS 指定地址和绑定,以便客户端能够向 ICalculator 服务进行身份验证。

下面的代码演示了此绑定在服务上的配置。

    <bindings>
      <ws2007FederationHttpBinding>
        <binding name="ServiceFed" >
          <security mode ="Message">
            <message issuedKeyType ="SymmetricKey"
                     issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
              <!-- Metadata address for Security Token Service -->
              <issuerMetadata address ="https://localhost:8000/sts/mex" >
                <identity>
                  <certificateReference storeLocation ="CurrentUser" 
                                        storeName="TrustedPeople" 
                                        x509FindType ="FindBySubjectDistinguishedName" 
                                        findValue ="CN=STS" />
                </identity>
              </issuerMetadata>
            </message>
          </security>
        </binding>
      </ws2007FederationHttpBinding>
    </bindings>

<security> element of <ws2007FederationHttpBinding>上,security 值指定应当使用哪种安全模式。此示例中使用的是 message 安全性,这也是在 <security> element中指定 <message> element of <ws2007FederationHttpBinding> 的原因。<message> element of <ws2007FederationHttpBinding>ws2007FederationHttpBinding<issuerMetadata> 元素为某个终结点指定地址和标识,该终结点可用于检索 STS 的元数据。

下面的代码演示了该服务的行为。

    <behaviors>
      <serviceBehaviors>
        <behavior name ="ServiceBehaviour" >
          <serviceDebug includeExceptionDetailInFaults ="true"/>
          <serviceMetadata httpGetEnabled ="true"/>
          <serviceCredentials>
            <issuedTokenAuthentication>
              <knownCertificates>
                <add storeLocation ="LocalMachine"
                     storeName="TrustedPeople"
                     x509FindType="FindBySubjectDistinguishedName"
                     findValue="CN=STS" />
              </knownCertificates>
            </issuedTokenAuthentication>
            <serviceCertificate storeLocation ="LocalMachine"
                                storeName ="My"
                                x509FindType ="FindBySubjectDistinguishedName"
                                findValue ="CN=localhost"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>

<issuedTokenAuthentication> of <serviceCredentials>> 使服务可以指定对令牌的约束,客户端可以在身份验证过程中出示该令牌。此配置指定该服务接受由主题名称为 CN=STS 的证书签名的令牌。

STS 使用标准的 WS2007HttpBinding 提供单个终结点。服务响应客户端对令牌的请求。如果客户端使用 Windows 帐户进行身份验证,则服务将颁发一个令牌,该令牌以声明的形式包含客户端的用户名。在创建令牌的过程中,STS 使用与 CN=STS 证书关联的私钥对令牌进行签名。另外,它还创建对称密钥并使用与 CN=localhost 证书关联的公钥对该密钥进行加密。在向客户端返回令牌的过程中,STS 还返回对称密钥。客户端向 ICalculator 服务出示所颁发的令牌,并通过使用密钥对消息进行签名来证明客户端知道该对称密钥。

运行示例时,对安全令牌的请求显示在 STS 控制台窗口中。操作请求和响应显示在客户端和服务控制台窗口中。在任何一个控制台窗口中按 Enter 可以关闭应用程序。

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.

通过运行此示例随附的 Setup.bat 文件,可以用相关的证书将服务器和 STS 配置为运行自承载应用程序。该批处理文件在 LocalMachine/TrustedPeople 证书存储区中创建两个证书。第一个证书的主题名称为 CN=STS,STS 使用该证书对颁发给客户端的安全令牌进行签名。第二个证书的主题名称为 CN=localhost,STS 使用该证书,按照服务能够解密的方式对密钥进行加密。

设置、生成和运行示例

  1. 请确保已经执行了 Windows Communication Foundation 示例的一次性安装过程

  2. 运行 Setup.bat 文件以创建所需的证书。

提示

在 Windows Vista 上,右击 Setup.bat,再单击“以管理员身份运行”

该批处理文件使用随 Windows SDK 分发的 Certmgr.exe 和 Makecert.exe。但是,您必须从 Visual Studio 的工具命令提示中运行 Setup.bat,脚本才能找到这些工具。

  1. 若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。
  2. 若要用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。如果您使用的是 Windows Vista,则必须用提升的特权运行 Service.exe、Client.exe 和 SecurityTokenService.exe(右击这些文件,再单击**“以管理员身份运行”**)。

另请参见

任务

WS 联合身份验证 HTTP 绑定

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.