Nasıl yapılır: Kanal Güvenliği Kimlik Bilgilerini Belirtme
Windows Communication Foundation (WCF) Hizmeti Takma Adı, COM uygulamalarının WCF hizmetlerini çağırmasına izin verir. Çoğu WCF hizmeti, istemcinin kimlik doğrulaması ve yetkilendirme için kimlik bilgilerini belirtmesini gerektirir. WCF istemcisinden WCF hizmetini çağırırken, bu kimlik bilgilerini yönetilen kodda veya uygulama yapılandırma dosyasında belirtebilirsiniz. BIR COM uygulamasından WCF hizmetini çağırırken, kimlik bilgilerini belirtmek için arabirimini kullanabilirsiniz IChannelCredentials . Bu konu başlığında, arabirimi kullanarak kimlik bilgilerini belirtmenin çeşitli yolları gösterilmektedir IChannelCredentials .
Not
IChannelCredentials IDispatch tabanlı bir arabirimdir ve Visual Studio ortamında IntelliSense işlevselliğini alamazsınız.
Bu makalede, İleti Güvenliği Örneği'nde tanımlanan WCF hizmeti kullanılır.
İstemci sertifikası belirtmek için
Gerekli test sertifikalarını oluşturmak ve yüklemek için İleti Güvenliği dizininde Setup.bat dosyasını çalıştırın.
İleti Güvenliği projesini açın.
Arabirim tanımına
ICalculator
ekleyin[ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")]
.Hizmetin App.config dosyasında uç nokta etiketine ekleyin
bindingNamespace="http://Microsoft.ServiceModel.Samples"
.İleti Güvenliği Örneği'ni oluşturun ve Service.exe çalıştırın. Hizmetin çalıştığından emin olmak için hizmetin URI'sine (
http://localhost:8000/ServiceModelSamples/Service
) göz atın.Visual Basic 6.0'ı açın ve yeni bir Standart .exe dosyası oluşturun. Forma bir düğme ekleyin ve tıklama işleyicisine aşağıdaki kodu eklemek için düğmeye çift tıklayın:
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)
Visual Basic uygulamasını çalıştırın ve sonuçları doğrulayın.
Visual Basic uygulaması, Add(3, 4) çağrısının sonucunu içeren bir ileti kutusu görüntüler. SetClientCertificateFromFile(String, String, String) veya SetClientCertificateFromStoreByName(String, String, String) İstemci Sertifikası'nı SetClientCertificateFromStore(String, String, String, Object) ayarlamak için yerine de kullanılabilir:
monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"
Not
Bu çağrının çalışması için istemci sertifikasının istemcinin üzerinde çalıştığı makinede güvenilir olması gerekir.
Not
Takma ad yanlış biçimlendirilmişse veya hizmet kullanılamıyorsa, çağrısı GetObject
"Geçersiz Söz Dizimi" hatası döndürür. Bu hatayı alırsanız, kullandığınız takma adın doğru olduğundan ve hizmetin kullanılabilir olduğundan emin olun.
Kullanıcı adı ve parola belirtmek için
Service App.config dosyasını kullanacak
wsHttpBinding
şekilde değiştirin. Bu, kullanıcı adı ve parola doğrulaması için gereklidir:UserName olarak
clientCredentialType
ayarlayın:Visual Basic 6.0'ı açın ve yeni bir Standart .exe dosyası oluşturun. Forma bir düğme ekleyin ve tıklama işleyicisine aşağıdaki kodu eklemek için düğmeye çift tıklayın:
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)
Visual Basic uygulamasını çalıştırın ve sonuçları doğrulayın. Visual Basic uygulaması, Add(3, 4) çağrısının sonucunu içeren bir ileti kutusu görüntüler.
Not
Bu örnekte hizmet takma adı içinde belirtilen bağlama WSHttpBinding_ICalculator olarak değiştirildi. Ayrıca çağrısında SetUserNameCredential(String, String)geçerli bir kullanıcı adı ve parola sağlamanız gerektiğini unutmayın.
Windows Kimlik Bilgilerini belirtmek için
Service App.config dosyasında Windows olarak ayarlayın
clientCredentialType
:Visual Basic 6.0'ı açın ve yeni bir Standart .exe dosyası oluşturun. Forma bir düğme ekleyin ve tıklama işleyicisine aşağıdaki kodu eklemek için düğmeye çift tıklayın:
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)
Visual Basic uygulamasını çalıştırın ve sonuçları doğrulayın. Visual Basic uygulaması, Add(3, 4) çağrısının sonucunu içeren bir ileti kutusu görüntüler.
Not
"etki alanı", "userID" ve "password" değerlerini geçerli değerlerle değiştirmeniz gerekir.
Sorun belirteci belirtmek için
Sorun belirteçleri yalnızca federasyon güvenliği kullanan uygulamalar için kullanılır. Federasyon güvenliği hakkında daha fazla bilgi için bkz . Federasyon ve Verilen Belirteçler ve Federasyon Örneği.
Aşağıdaki Visual Basic kod örneğinde yönteminin nasıl çağrılacakları gösterilmektedir 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")
Bu yöntemin parametreleri hakkında daha fazla bilgi için bkz SetIssuedToken(String, String, String). .