Partilhar via


Como: Especificar credenciais de segurança de canal

O Windows Communication Foundation (WCF) Service Moniker permite que aplicativos COM chamem serviços WCF. A maioria dos serviços WCF requer que o cliente especifique credenciais para autenticação e autorização. Ao chamar um serviço WCF de um cliente WCF, você pode especificar essas credenciais em código gerenciado ou em um arquivo de configuração de aplicativo. Ao chamar um serviço WCF de um aplicativo COM, você pode usar a IChannelCredentials interface para especificar credenciais. Este tópico ilustrará várias maneiras de especificar credenciais usando a IChannelCredentials interface.

Nota

IChannelCredentials é uma interface baseada em IDispatch e você não obterá a funcionalidade IntelliSense no ambiente do Visual Studio.

Este artigo usará o serviço WCF definido no Exemplo de segurança de mensagem.

Para especificar um certificado de cliente

  1. Execute o arquivo Setup.bat no diretório Message Security para criar e instalar os certificados de teste necessários.

  2. Abra o projeto Segurança de Mensagens.

  3. Adicione [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] à definição de ICalculator interface.

  4. Adicione bindingNamespace="http://Microsoft.ServiceModel.Samples" à marca de ponto de extremidade no App.config para o serviço.

  5. Crie o Exemplo de Segurança de Mensagem e execute Service.exe. Navegue até o URI do serviço (http://localhost:8000/ServiceModelSamples/Service) para garantir que o serviço esteja funcionando.

  6. Abra o Visual Basic 6.0 e crie um novo arquivo de .exe padrão. Adicione um botão ao formulário e clique duas vezes no botão para adicionar o seguinte código ao manipulador Click:

        monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
        monString = monString + ", address=http://localhost:8000/ServiceModelSamples/Service"  
        monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples"  
        monString = monString + ", binding=BasicHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples"  
    
        Set monikerProxy = GetObject(monString)  
    
        'Set the Service Certificate.  
     monikerProxy.ChannelCredentials.SetServiceCertificateAuthentication "CurrentUser", "NoCheck", "PeerOrChainTrust"  
    monikerProxy.ChannelCredentials.SetDefaultServiceCertificateFromStore "CurrentUser", "TrustedPeople", "FindBySubjectName", "localhost"  
    
        'Set the Client Certificate.  
        monikerProxy.ChannelCredentials.SetClientCertificateFromStoreByName "CN=client.com", "CurrentUser", "My"  
        MsgBox monikerProxy.Add(3, 4)  
    
  7. Execute o aplicativo Visual Basic e verifique os resultados.

    O aplicativo Visual Basic exibirá uma caixa de mensagem com o resultado da chamada Add(3, 4). SetClientCertificateFromFile(String, String, String) ou SetClientCertificateFromStoreByName(String, String, String) também pode ser usado no lugar de para definir o certificado do SetClientCertificateFromStore(String, String, String, Object) cliente:

    monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"  
    

Nota

Para que essa chamada funcione, o certificado do cliente precisa ser confiável na máquina em que o cliente está sendo executado.

Nota

Se o moniker estiver malformado ou se o serviço não estiver disponível, a chamada para GetObject retornará um erro dizendo "Sintaxe inválida". Se você receber esse erro, verifique se o moniker que você está usando está correto e se o serviço está disponível.

Para especificar nome de usuário e senha

  1. Modifique o arquivo Service App.config para usar o wsHttpBindingarquivo . Isso é necessário para a validação de nome de usuário e senha:

  2. Defina o clientCredentialType como UserName:

  3. Abra o Visual Basic 6.0 e crie um novo arquivo de .exe padrão. Adicione um botão ao formulário e clique duas vezes no botão para adicionar o seguinte código ao manipulador Click:

    monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
    monString = monString + ", address=http://localhost:8000/ServiceModelSamples/Service"  
    monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples"  
    monString = monString + ", binding=WSHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples"  
    
    Set monikerProxy = GetObject(monString)  
    
    monikerProxy.ChannelCredentials.SetServiceCertificateAuthentication "CurrentUser", "NoCheck", "PeerOrChainTrust"  
    monikerProxy.ChannelCredentials.SetUserNameCredential "username", "password"  
    
    MsgBox monikerProxy.Add(3, 4)  
    
  4. Execute o aplicativo Visual Basic e verifique os resultados. O aplicativo Visual Basic exibirá uma caixa de mensagem com o resultado da chamada Add(3, 4).

    Nota

    A associação especificada no moniker de serviço neste exemplo foi alterada para WSHttpBinding_ICalculator. Observe também que você deve fornecer um nome de usuário e senha válidos na chamada para SetUserNameCredential(String, String).

Para especificar as credenciais do Windows

  1. Defina clientCredentialType como Windows no arquivo Service App.config:

  2. Abra o Visual Basic 6.0 e crie um novo arquivo de .exe padrão. Adicione um botão ao formulário e clique duas vezes no botão para adicionar o seguinte código ao manipulador Click:

    monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
    monString = monString + ", address=http://localhost:8000/ServiceModelSamples/Service"  
    monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples"  
    monString = monString + ", binding=WSHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples"  
    monString = monString + ", upnidentity=domain\userID"  
    
    Set monikerProxy = GetObject(monString)  
     monikerProxy.ChannelCredentials.SetWindowsCredential "domain", "userID", "password", 1, True  
    
    MsgBox monikerProxy.Add(3, 4)  
    
  3. Execute o aplicativo Visual Basic e verifique os resultados. O aplicativo Visual Basic exibirá uma caixa de mensagem com o resultado da chamada Add(3, 4).

    Nota

    Você deve substituir "domain", "userID" e "password" por valores válidos.

Para especificar um token de emissão

  1. Os tokens de emissão são usados apenas para aplicativos que usam segurança federada. Para obter mais informações sobre segurança federada, consulte Federação e tokens emitidos e Exemplo de federação.

    O exemplo de código do Visual Basic a seguir ilustra como chamar o SetIssuedToken(String, String, String) método:

        monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
        monString = monString + ", address=http://localhost:8000/SomeService/Service"  
        monString = monString + ", contract=ICalculator, contractNamespace=http://SomeService.Samples"  
        monString = monString + ", binding=WSHttpBinding_ISomeContract, bindingNamespace=http://SomeService.Samples"  
    
        Set monikerProxy = GetObject(monString)  
    monikerProxy.SetIssuedToken("http://somemachine/sts", "bindingType", "binding")  
    

    Para obter mais informações sobre os parâmetros para esse método, consulte SetIssuedToken(String, String, String).

Consulte também