Postupy: Určení přihlašovacích údajů pro zabezpečení kanálu
Moniker služby Wcf (Windows Communication Foundation) umožňuje aplikacím modelu COM volat služby WCF. Většina služeb WCF vyžaduje, aby klient zadal přihlašovací údaje pro ověřování a autorizaci. Při volání služby WCF z klienta WCF můžete tyto přihlašovací údaje zadat ve spravovaném kódu nebo v konfiguračním souboru aplikace. Při volání služby WCF z aplikace MODELU COM můžete použít IChannelCredentials rozhraní k zadání přihlašovacích údajů. Toto téma ukazuje různé způsoby zadávání přihlašovacích údajů pomocí IChannelCredentials rozhraní.
Poznámka:
IChannelCredentials je rozhraní založené na IDispatch a nebudete dostávat funkce IntelliSense v prostředí sady Visual Studio.
Tento článek použije službu WCF definovanou v ukázce zabezpečení zpráv.
Zadání klientského certifikátu
Spuštěním souboru Setup.bat v adresáři Zabezpečení zpráv vytvořte a nainstalujte požadované testovací certifikáty.
Otevřete projekt Zabezpečení zpráv.
Přidejte
[ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")]
doICalculator
definice rozhraní.Přidejte
bindingNamespace="http://Microsoft.ServiceModel.Samples"
do značky koncového bodu v souboru App.config pro službu.Sestavte ukázku zabezpečení zpráv a spusťte Service.exe. Přejděte na identifikátor URI (
http://localhost:8000/ServiceModelSamples/Service
) služby a ujistěte se, že služba funguje.Otevřete Visual Basic 6.0 a vytvořte nový soubor standardního .exe. Přidejte tlačítko do formuláře a poklikáním na tlačítko přidejte následující kód do obslužné rutiny Kliknutí:
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)
Spusťte aplikaci Visual Basic a ověřte výsledky.
Aplikace Jazyka Visual Basic zobrazí okno se zprávou s výsledkem volání Add(3, 4). SetClientCertificateFromFile(String, String, String) nebo SetClientCertificateFromStoreByName(String, String, String) lze použít také místo nastavení klientského SetClientCertificateFromStore(String, String, String, Object) certifikátu:
monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"
Poznámka:
Aby toto volání fungovalo, musí být klientský certifikát důvěryhodný na počítači, na kterém je klient spuštěný.
Poznámka:
Pokud je moniker poškozený nebo pokud je služba nedostupná, volání GetObject
vrátí chybu s informacemi o neplatné syntaxi. Pokud se zobrazí tato chyba, ujistěte se, že je název, který používáte, správný a že je služba dostupná.
Zadání uživatelského jména a hesla
Upravte soubor Service App.config tak, aby používal soubor
wsHttpBinding
. To se vyžaduje pro ověření uživatelského jména a hesla:clientCredentialType
Nastavte uživatelské jméno:Otevřete Visual Basic 6.0 a vytvořte nový soubor standardního .exe. Přidejte tlačítko do formuláře a poklikáním na tlačítko přidejte následující kód do obslužné rutiny Kliknutí:
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)
Spusťte aplikaci Visual Basic a ověřte výsledky. Aplikace Jazyka Visual Basic zobrazí okno se zprávou s výsledkem volání Add(3, 4).
Poznámka:
Vazba zadaná v monikeru služby v této ukázce byla změněna na WSHttpBinding_ICalculator. Všimněte si také, že je nutné zadat platné uživatelské jméno a heslo při volání SetUserNameCredential(String, String).
Zadání přihlašovacích údajů systému Windows
Nastavte
clientCredentialType
na Windows v souboru Service App.config:Otevřete Visual Basic 6.0 a vytvořte nový soubor standardního .exe. Přidejte tlačítko do formuláře a poklikáním na tlačítko přidejte následující kód do obslužné rutiny Kliknutí:
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)
Spusťte aplikaci Visual Basic a ověřte výsledky. Aplikace Jazyka Visual Basic zobrazí okno se zprávou s výsledkem volání Add(3, 4).
Poznámka:
Musíte nahradit "domain", "userID" a "password" platnými hodnotami.
Určení tokenu problému
Tokeny problému se používají jenom pro aplikace používající federované zabezpečení. Další informace o federované zabezpečení najdete v tématu Federace a vystavené tokeny a ukázka federace.
Následující příklad kódu jazyka Visual Basic ukazuje, jak volat metodu 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")
Další informace o parametrech pro tuto metodu naleznete v tématu SetIssuedToken(String, String, String).