Dela via


Anvisningar: Ange autentiseringsuppgifter för kanalsäkerhet

WCF-tjänsten (Windows Communication Foundation) Moniker tillåter COM-program att anropa WCF-tjänster. De flesta WCF-tjänster kräver att klienten anger autentiseringsuppgifter för autentisering och auktorisering. När du anropar en WCF-tjänst från en WCF-klient kan du ange dessa autentiseringsuppgifter i hanterad kod eller i en programkonfigurationsfil. När du anropar en WCF-tjänst från ett COM-program kan du använda IChannelCredentials gränssnittet för att ange autentiseringsuppgifter. Det här avsnittet visar olika sätt att ange autentiseringsuppgifter med hjälp av IChannelCredentials gränssnittet.

Kommentar

IChannelCredentials är ett IDispatch-baserat gränssnitt och du får inte IntelliSense-funktioner i Visual Studio-miljön.

Den här artikeln använder den WCF-tjänst som definierats i exemplet på meddelandesäkerhet.

Så här anger du ett klientcertifikat

  1. Kör Setup.bat-filen i katalogen Meddelandesäkerhet för att skapa och installera de testcertifikat som krävs.

  2. Öppna projektet Meddelandesäkerhet.

  3. Lägg till [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] i gränssnittsdefinitionen ICalculator .

  4. Lägg till bindingNamespace="http://Microsoft.ServiceModel.Samples" i slutpunktstaggen i App.config för tjänsten.

  5. Skapa exempel på meddelandesäkerhet och kör Service.exe. Bläddra till tjänstens URI (http://localhost:8000/ServiceModelSamples/Service) för att säkerställa att tjänsten fungerar.

  6. Öppna Visual Basic 6.0 och skapa en ny Standard .exe-fil. Lägg till en knapp i formuläret och dubbelklicka på knappen för att lägga till följande kod i klickhanteraren:

        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. Kör Visual Basic-programmet och verifiera resultatet.

    Visual Basic-programmet visar en meddelanderuta med resultatet från att anropa Add(3, 4). SetClientCertificateFromFile(String, String, String) eller SetClientCertificateFromStoreByName(String, String, String) kan också användas i stället SetClientCertificateFromStore(String, String, String, Object) för för att ange klientcertifikatet:

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

Kommentar

För att det här anropet ska fungera måste klientcertifikatet vara betrott på den dator som klienten körs på.

Kommentar

Om monikern är felaktigt formaterad eller om tjänsten inte är tillgänglig returnerar anropet till GetObject ett fel med texten "Ogiltig syntax". Om du får det här felet kontrollerar du att monikern du använder är korrekt och att tjänsten är tillgänglig.

Ange användarnamn och lösenord

  1. Ändra filen Service App.config så att den wsHttpBindinganvänder . Detta krävs för verifiering av användarnamn och lösenord:

  2. clientCredentialType Ange till Användarnamn:

  3. Öppna Visual Basic 6.0 och skapa en ny Standard .exe-fil. Lägg till en knapp i formuläret och dubbelklicka på knappen för att lägga till följande kod i klickhanteraren:

    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. Kör Visual Basic-programmet och verifiera resultatet. Visual Basic-programmet visar en meddelanderuta med resultatet från att anropa Add(3, 4).

    Kommentar

    Bindningen som anges i tjänstmonikern i det här exemplet har ändrats till WSHttpBinding_ICalculator. Observera också att du måste ange ett giltigt användarnamn och lösenord i anropet till SetUserNameCredential(String, String).

Så här anger du Windows-autentiseringsuppgifter

  1. Ange clientCredentialType till Windows i filen Service App.config:

  2. Öppna Visual Basic 6.0 och skapa en ny Standard .exe-fil. Lägg till en knapp i formuläret och dubbelklicka på knappen för att lägga till följande kod i klickhanteraren:

    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. Kör Visual Basic-programmet och verifiera resultatet. Visual Basic-programmet visar en meddelanderuta med resultatet från att anropa Add(3, 4).

    Kommentar

    Du måste ersätta "domän", "userID" och "lösenord" med giltiga värden.

Ange en problemtoken

  1. Problemtoken används endast för program som använder federerad säkerhet. Mer information om federerad säkerhet finns i Federations- och utfärdade token och federationsexempel.

    Följande Visual Basic-kodexempel illustrerar hur du anropar SetIssuedToken(String, String, String) metoden:

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

    Mer information om parametrarna för den här metoden finns i SetIssuedToken(String, String, String).

Se även