Aracılığıyla paylaş


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

  1. Gerekli test sertifikalarını oluşturmak ve yüklemek için İleti Güvenliği dizininde Setup.bat dosyasını çalıştırın.

  2. İleti Güvenliği projesini açın.

  3. Arabirim tanımına ICalculator ekleyin[ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")].

  4. Hizmetin App.config dosyasında uç nokta etiketine ekleyin bindingNamespace="http://Microsoft.ServiceModel.Samples" .

  5. İ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.

  6. 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)  
    
  7. 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

  1. Service App.config dosyasını kullanacak wsHttpBindingşekilde değiştirin. Bu, kullanıcı adı ve parola doğrulaması için gereklidir:

  2. UserName olarak clientCredentialType ayarlayın:

  3. 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)  
    
  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

  1. Service App.config dosyasında Windows olarak ayarlayın clientCredentialType :

  2. 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)  
    
  3. 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

  1. 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). .

Ayrıca bkz.