Aracılığıyla paylaş


İleti Kimlik Bilgileri ile WS Aktarma

Bu örnek, iletide taşınan istemci kimlik bilgileriyle birlikte SSL aktarım güvenliğinin kullanımını gösterir. Bu örnek bağlamayı wsHttpBinding kullanır.

Varsayılan olarak, wsHttpBinding bağlama HTTP iletişimi sağlar. Aktarım güvenliği için yapılandırıldığında bağlama HTTPS iletişimini destekler. HTTPS, kablo üzerinden iletilen iletiler için gizlilik ve bütünlük koruması sağlar. Ancak, istemcinin hizmette kimliğini doğrulamak için kullanılabilecek kimlik doğrulama mekanizmaları kümesi, HTTPS aktarımının desteklediğiyle sınırlıdır. Windows Communication Foundation (WCF), bu sınırlamayı aşmak için tasarlanmış bir TransportWithMessageCredential güvenlik modu sunar. Bu güvenlik modu yapılandırıldığında aktarım güvenliği, iletilen iletiler için gizlilik ve bütünlük sağlamak ve hizmet kimlik doğrulamasını gerçekleştirmek için kullanılır. Ancak istemci kimlik doğrulaması, istemci kimlik bilgileri doğrudan iletiye yerleştirilerek gerçekleştirilir. Bu, aktarım güvenlik modunun performans avantajını koruyarak istemci kimlik doğrulaması için ileti güvenlik modu tarafından desteklenen herhangi bir kimlik bilgisi türünü kullanmanıza olanak tanır.

Bu örnekte, hizmette istemcinin kimliğini doğrulamak için bir UserName kimlik bilgisi türü kullanılır.

Bu örnek, hesap makinesi hizmeti uygulayan Başlarken'i temel alır. Bağlama wsHttpBinding , istemci ve hizmet için uygulama yapılandırma dosyalarında belirtilir ve yapılandırılır.

Not

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Örnekteki program kodu, Başlarken hizmetininkiyle neredeyse aynıdır. Hizmet sözleşmesi tarafından sağlanan ek bir işlem vardır: GetCallerIdentity. Bu işlem, çağıranın kimliğinin adını arayana döndürür.

public string GetCallerIdentity()
{
    // Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.
    return ServiceSecurityContext.Current.WindowsIdentity.Name;
}

Örneği oluşturup çalıştırmadan önce bir sertifika oluşturup Web Sunucusu Sertifika Sihirbazı'nı kullanarak atamalısınız. Yapılandırma dosyası ayarlarındaki uç nokta tanımı ve bağlama tanımı, istemci için aşağıdaki örnek yapılandırmada gösterildiği gibi güvenlik modunu etkinleştirir TransportWithMessageCredential .

<system.serviceModel>
  <client>
    <endpoint name=""
              address="https://localhost/servicemodelsamples/service.svc"
              binding="wsHttpBinding"
              bindingConfiguration="Binding1"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
  </client>

  <bindings>
    <wsHttpBinding>
      <!--
        This configuration defines the security mode as TransportWithMessageCredential.
        and the clientCredentialType as UserName.
        -->
      <binding name="Binding1">
        <security mode ="TransportWithMessageCredential">
          <message clientCredentialType="UserName" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
</system.serviceModel>

Belirtilen adres şemayı https:// kullanır. Bağlama yapılandırması, güvenlik modunu olarak TransportWithMessageCredentialayarlar. Hizmetin Web.config dosyasında aynı güvenlik modu belirtilmelidir.

Bu örnekte kullanılan sertifika Makecert.exe ile oluşturulmuş bir test sertifikası olduğundan tarayıcınızdan https: adresi gibi https://localhost/servicemodelsamples/service.svcbir https: adresine erişmeye çalıştığınızda bir güvenlik uyarısı görüntülenir. WCF istemcisinin yerinde bir test sertifikasıyla çalışmasına izin vermek için, güvenlik uyarısını engellemek için istemciye bazı ek kodlar eklenmiştir. Bu kod ve eşlik eden sınıf, üretim sertifikaları kullanılırken gerekli değildir.

// WARNING: This code is only needed for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");

Örneği çalıştırdığınızda, işlem istekleri ve yanıtları istemci konsolu penceresinde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

Username authentication required.
Provide a valid machine or domain account. [domain\\user]
   Enter username:
YourDomainName\YourAccountName
   Enter password:
********
YourDomainName\YourAccountName
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.

  2. Internet Information Services (IIS) Sunucu Sertifikası Yükleme Yönergelerini gerçekleştirdiğinizden emin olun.

  3. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.

  4. Örneği tek veya makineler arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.