Transporte WS com credencial de mensagem
Este exemplo demonstra o uso da segurança de transporte SSL em combinação com a credencial do cliente que está sendo carregada na mensagem. Este exemplo usa a wsHttpBinding
vinculação.
Por padrão, a wsHttpBinding
associação fornece comunicação HTTP. Quando configurada para segurança de transporte, a ligação suporta comunicação HTTPS. HTTPS fornece confidencialidade e proteção de integridade para as mensagens que são transmitidas através do fio. No entanto, o conjunto de mecanismos de autenticação que podem ser usados para autenticar o cliente no serviço é limitado ao que o transporte HTTPS suporta. O Windows Communication Foundation (WCF) oferece um TransportWithMessageCredential
modo de segurança projetado para superar essa limitação. Quando esse modo de segurança é configurado, a segurança de transporte é usada para fornecer confidencialidade e integridade para as mensagens transmitidas e para executar a autenticação do serviço. No entanto, a autenticação do cliente é executada colocando a credencial do cliente diretamente na mensagem. Isso permite que você use qualquer tipo de credencial suportado pelo modo de segurança de mensagem para a autenticação do cliente, mantendo o benefício de desempenho do modo de segurança de transporte.
Neste exemplo, um UserName
tipo de credencial é usado para autenticar o cliente no serviço.
Este exemplo é baseado na Introdução que implementa um serviço de calculadora. A wsHttpBinding
associação é especificada e configurada nos arquivos de configuração do aplicativo para o cliente e o serviço.
Nota
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
O código do programa no exemplo é quase idêntico ao do serviço de Introdução . Há uma operação adicional fornecida pelo contrato de serviços - GetCallerIdentity
. Esta operação retorna o nome da identidade do chamador para o chamador.
public string GetCallerIdentity()
{
// Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.
return ServiceSecurityContext.Current.WindowsIdentity.Name;
}
Você deve criar um certificado e atribuí-lo usando o Assistente de Certificado de Servidor Web antes de criar e executar o exemplo. A definição de ponto de extremidade e a definição de vinculação nas definições do arquivo de configuração habilitam TransportWithMessageCredential
o modo de segurança, conforme mostrado no exemplo de configuração a seguir para o cliente.
<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>
O endereço especificado usa o https://
esquema. A configuração de vinculação define o modo de segurança como TransportWithMessageCredential
. O mesmo modo de segurança deve ser especificado no arquivo Web.config do serviço.
Como o certificado usado neste exemplo é um certificado de teste criado com Makecert.exe, um alerta de segurança aparece quando você tenta acessar um endereço https:, como https://localhost/servicemodelsamples/service.svc
, do navegador. Para permitir que o cliente WCF trabalhe com um certificado de teste instalado, algum código adicional foi adicionado ao cliente para suprimir o alerta de segurança. Este código e a classe que o acompanha não são necessários quando se utilizam certificados de produção.
// 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");
Quando você executa o exemplo, as solicitações de operação e as respostas são exibidas na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o cliente.
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.
Para configurar, compilar e executar o exemplo
Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
Verifique se você executou as Instruções de Instalação do Certificado de Servidor do IIS (Serviços de Informações da Internet).
Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.