Condividi tramite


Procedura: specificare credenziali di sicurezza del canale

Il moniker del servizio Windows Communication Foundation (WCF) consente alle applicazioni COM di chiamare i servizi WCF. La maggior parte dei servizi WCF richiede al client di specificare le credenziali per l'autenticazione e l'autorizzazione. Quando si chiama un servizio WCF da un client WCF, è possibile specificare queste credenziali nel codice gestito o in un file di configurazione dell'applicazione. Quando si chiama un servizio WCF da un'applicazione COM, è possibile usare l'interfaccia IChannelCredentials per specificare le credenziali. In questo argomento vengono illustrate varie modalità di specifica delle credenziali mediante l'interfaccia IChannelCredentials.

Nota

IChannelCredentials è un'interfaccia basata su IDispatch nella quale non viene visualizzata la funzionalità IntelliSense nell'ambiente Visual Studio.

Questo articolo userà il servizio WCF definito nell'esempio di sicurezza dei messaggi.

Per specificare un certificato client

  1. Eseguire il file Setup.bat nella directory della protezione messaggi per creare e installare i certificati di prova obbligatori.

  2. Aprire il progetto Message Security.

  3. Aggiungere [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] alla definizione dell'interfaccia ICalculator.

  4. Aggiungere bindingNamespace="http://Microsoft.ServiceModel.Samples" al tag endpoint in App.config per il servizio.

  5. Compilare l'esempio di sicurezza dei messaggi ed eseguire Service.exe. Passare all'URI del servizio (http://localhost:8000/ServiceModelSamples/Service) per assicurarsi che il servizio funzioni.

  6. Aprire Visual Basic 6.0 e creare un nuovo file standard con estensione exe. Aggiungere un pulsante al form e fare doppio clic su di esso per aggiungere il codice seguente al gestore 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. Eseguire l'applicazione Visual Basic e verificare i risultati.

    Nell'applicazione Visual Basic verrà visualizzata una finestra di messaggio con il risultato relativo alla chiamata di Add(3, 4). Per impostare il certificato client è inoltre possibile usare SetClientCertificateFromFile(String, String, String) o SetClientCertificateFromStoreByName(String, String, String) al posto di SetClientCertificateFromStore(String, String, String, Object):

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

Nota

Perché questa chiamata venga eseguita correttamente, il certificato client deve essere considerato attendibile nel computer in cui è in esecuzione il client.

Nota

Se il formato del moniker non è valido o se il servizio non è disponibile, la chiamata a GetObject restituirà un errore di sintassi non valida. Se si riceve questo errore, verificare che il moniker che si sta usando sia valido e che il servizio sia disponibile.

Per specificare un nome utente e una password

  1. Modificare il file Service App.config per usare wsHttpBinding. Questa operazione è necessaria per la convalida del nome utente e della password.

  2. Impostare clientCredentialType su UserName:

  3. Aprire Visual Basic 6.0 e creare un nuovo file standard con estensione exe. Aggiungere un pulsante al form e fare doppio clic su di esso per aggiungere il codice seguente al gestore 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. Eseguire l'applicazione Visual Basic e verificare i risultati. Nell'applicazione Visual Basic verrà visualizzata una finestra di messaggio con il risultato relativo alla chiamata di Add(3, 4).

    Nota

    L'associazione specificata nel moniker del servizio in questo esempio è stata impostata su WSHttpBinding_ICalculator. Nella chiamata a SetUserNameCredential(String, String) è inoltre necessario fornire un nome utente e una password validi.

Per specificare credenziali di Windows.

  1. Impostare clientCredentialType su Windows nel file App.config del servizio:

  2. Aprire Visual Basic 6.0 e creare un nuovo file standard con estensione exe. Aggiungere un pulsante al form e fare doppio clic su di esso per aggiungere il codice seguente al gestore 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. Eseguire l'applicazione Visual Basic e verificare i risultati. Nell'applicazione Visual Basic verrà visualizzata una finestra di messaggio con il risultato relativo alla chiamata di Add(3, 4).

    Nota

    È necessario sostituire "dominio", "IDUtente" e "password" con valori validi.

Per specificare un token di pubblicazione

  1. I token di pubblicazione vengono usati soltanto per applicazioni che usano la protezione federata. Per altre informazioni sulla sicurezza federata, vedere Federazione e token rilasciati ed Esempio di federazione.

    L'esempio di codice Visual Basic seguente mostra come chiamare il metodo SetIssuedToken(String, String, String):

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

    Per altre informazioni sui parametri relativi a questo metodo, vedere SetIssuedToken(String, String, String).

Vedi anche