Procedura: specificare credenziali di protezione del canale

Il moniker dei servizi Windows Communication Foundation (WCF) consente alle applicazioni COM di chiamare servizi WCF. La maggior parte dei servizi WCF richiede al client di specificare credenziali per l'autenticazione e l'autorizzazione. Quando viene chiamato 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, per specificare le credenziali è possibile utilizzare l'interfaccia IChannelCredentials. 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.

In questo articolo viene utilizzato il servizio WCF definito nella sezione Message Security Sample.

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 dell'endpoint in App.config per il servizio.

  5. Compilare l'esempio di protezione dei messaggi ed eseguire Service.exe. Aprire Internet Explorer e passare all'URI del servizio () per verificare che il servizio sia in funzione.

  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=https://localhost:8000/ServiceModelSamples/Service?wsdl"
        monString = monString + ", address=https://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 viene visualizzata una finestra di messaggio con il risultato relativo alla chiamata di Add(3, 4). Per impostare il certificato client è inoltre possibile utilizzare SetClientCertificateFromFile o SetClientCertificateFromStoreByName al posto di SetClientCertificateFromStore:

    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 utilizzando sia valido e che il servizio sia disponibile.

Per specificare un nome utente e una password

  1. Modificare il file Service App.config per utilizzare 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=https://localhost:8000/ServiceModelSamples/Service?wsdl"
        monString = monString + ", address=https://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 è 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=https://localhost:8000/ServiceModelSamples/Service?wsdl"
        monString = monString + ", address=https://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 utilizzati soltanto per applicazioni che utilizzano la protezione federata. Per ulteriori informazioni sulla protezione federata, vedere Federazione e token emessi e Federation Sample.

    L'esempio di codice Visual Basic seguente mostra come chiamare il metodo SetIssuedToken:

        monString = "service:mexAddress=https://localhost:8000/ServiceModelSamples/Service?wsdl"
        monString = monString + ", address=https://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 ulteriori informazioni sui parametri relativi a questo metodo, vedere SetIssuedToken.

Vedere anche

Attività

Procedura: configurare le credenziali in un servizio federativo
Procedura: creare un client federato

Concetti

Federazione
Protezione dei messaggi in WCF
Associazioni e protezione