Compartilhar via


Associação HTTP de federação do WS 2007

O exemplo WS2007FederationHttp demonstra o uso de WS2007FederationHttpBindinguma associação padrão que você pode usar para criar cenários federados que dão suporte à versão 1.3 da especificação WS-Trust.

Observação

O procedimento de instalação e as instruções de build para este exemplo estão localizados no final deste tópico.

O exemplo consiste em um programa cliente baseado em console (Client.exe), um programa de serviço de token de segurança baseado em console (Securitytokenservice.exe) e um programa de serviço baseado em console (Service.exe). O serviço implementa um contrato que define um padrão de comunicação de solicitação/resposta. O contrato é definido pela ICalculator interface, que expõe operações matemáticas (Add, , SubtractMultiplye Divide). O cliente obtém um token de segurança do STS (Serviço de Token de Segurança) e faz solicitações síncronas ao serviço para uma determinada operação matemática. Em seguida, o serviço responde com o resultado. A atividade do cliente é visível na janela do console.

O exemplo disponibiliza o ICalculator contrato usando o ws2007FederationHttpBinding elemento. A configuração dessa associação no cliente é mostrada no seguinte código:

<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 ="http://localhost:8000/sts/windows"
                  binding ="ws2007HttpBinding" />
        </message>
      </security>
    </binding>
  </ws2007FederationHttpBinding>
</bindings>

Na <segurança>, o valor security especifica qual modo de segurança deve ser usado. Neste exemplo, a segurança message é usada, razão pela qual a <mensagem> é especificada dentro da <segurança>. O <elemento emissor> dentro da <mensagem> especifica o endereço e a associação para o STS que emite um token de segurança para o cliente para que o cliente possa se autenticar no ICalculator serviço.

A configuração dessa associação no serviço é mostrada no seguinte código:

<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 ="http://localhost:8000/sts/mex" >
            <identity>
              <certificateReference storeLocation ="CurrentUser"
                                    storeName="TrustedPeople"
                                    x509FindType ="FindBySubjectDistinguishedName"
                                    findValue ="CN=STS" />
            </identity>
          </issuerMetadata>
        </message>
      </security>
    </binding>
  </ws2007FederationHttpBinding>
</bindings>

Na <segurança>, o valor security especifica qual modo de segurança deve ser usado. Neste exemplo, a segurança message é usada, razão pela qual a <mensagem> é especificada dentro da <segurança>. O elemento <issuerMetadata> de ws2007FederationHttpBinding dentro da <mensagem> especifica o endereço e a identidade de um ponto de extremidade que pode ser usado para recuperar metadados para o SST.

O comportamento do serviço é mostrado no seguinte código:

<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>

O <issuedTokenAuthentication>> permite que o serviço especifique restrições nos tokens que permite que os clientes apresentem durante a autenticação. Essa configuração especifica que os tokens assinados por um certificado cujo nome de entidade é CN=STS são aceitos pelo serviço.

O STS disponibiliza um único endpoint usando o padrão WS2007HttpBinding. O serviço responde a solicitações de clientes para tokens. Se o cliente for autenticado usando uma conta do Windows, o serviço emitirá um token que contém o nome de usuário do cliente como uma declaração. Como parte da criação do token, o STS assina o token usando a chave privada associada ao certificado CN=STS. Além disso, ele cria uma chave simétrica e a criptografa usando a chave pública associada ao certificado CN=localhost. Ao retornar o token ao cliente, o STS também retorna a chave simétrica. O cliente apresenta o token emitido para o ICalculator serviço e prova que conhece a chave simétrica assinando a mensagem com essa chave.

Quando você executa o exemplo, a solicitação do token de segurança é mostrada na janela do console do STS. As solicitações e respostas da operação são exibidas nas janelas do cliente e do console de serviço. Pressione ENTER em qualquer uma das janelas do console para desligar o aplicativo.

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.

O arquivo Setup.bat incluído com este exemplo permite que você configure o servidor e o STS com os certificados relevantes para executar um aplicativo auto-hospedado. O arquivo em lote cria dois certificados no repositório de certificados LocalMachine/TrustedPeople. O primeiro certificado tem o nome de CN=STS e é usado pelo STS para assinar os tokens de segurança que emite para o cliente. O segundo certificado tem um nome de assunto de CN=localhost e é usado pelo STS para criptografar uma chave de forma que o serviço possa descriptografar.

Para configurar, compilar e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.

  2. Abra um Prompt de Comando do Desenvolvedor para Visual Studio com privilégios de administrador e execute o arquivo Setup.bat para criar os certificados necessários.

Esse arquivo em lote usa Certmgr.exe e Makecert.exe, que são distribuídos com o SDK do Windows. No entanto, você deve executar Setup.bat de dentro de um prompt de comando do Visual Studio para habilitar o script para encontrar essas ferramentas.

  1. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  2. Para executar o exemplo em uma configuração de computador único ou cruzado, siga as instruções em Executar os exemplos do Windows Communication Foundation. Se você estiver usando o Windows Vista, deverá executar Service.exe, Client.exee SecurityTokenService.exe com privilégios elevados (clique com o botão direito do mouse nos arquivos e clique em Executar como administrador).