Aracılığıyla paylaş


Nasıl yapılır: Enterprise Uç Noktalarını Kilitleme

Büyük kuruluşlar genellikle uygulamaların kurumsal güvenlik ilkelerine uygun olarak geliştirilmesini gerektirir. Aşağıdaki konu başlığında, bilgisayarlarda yüklü tüm Windows Communication Foundation (WCF) istemci uygulamalarını doğrulamak için kullanılabilecek bir istemci uç noktası doğrulayıcının nasıl geliştirileceği ve yükleneceği açıklanır.

Bu durumda, bu uç nokta davranışı machine.config dosyasındaki client commonBehaviors> bölümüne eklendiğinden doğrulayıcı bir istemci <doğrulayıcıdır. WCF yalnızca istemci uygulamaları için ortak uç nokta davranışlarını yükler ve yalnızca hizmet uygulamaları için ortak hizmet davranışlarını yükler. Hizmet uygulamaları için aynı doğrulayıcıyı yüklemek için doğrulayıcının bir hizmet davranışı olması gerekir. Daha fazla bilgi için commonBehaviors bölümüne bakın<.>

Önemli

Bir yapılandırma dosyasının AllowPartiallyTrustedCallersAttribute commonBehaviors> bölümüne eklenen< özniteliği (APTCA) ile işaretlenmemiş hizmet veya uç nokta davranışları, uygulama kısmi bir güven ortamında çalıştırıldığında çalıştırılmaz ve bu durumda hiçbir özel durum oluşmaz. Doğrulayıcılar gibi yaygın davranışların çalıştırılmasını zorunlu kılmak için şunlardan birini kullanmanız gerekir:

  • Ortak davranışınızı, Kısmi Güven uygulaması olarak dağıtıldığında çalıştırılabilmesi için özniteliğiyle AllowPartiallyTrustedCallersAttribute işaretleyin. APTCA işaretli derlemelerin çalışmasını önlemek için bilgisayarda bir kayıt defteri girdisi ayarlanabileceğini unutmayın..

  • Uygulama tam olarak güvenilen bir uygulama olarak dağıtılırsa, kullanıcıların uygulamayı Kısmi Güven ortamında çalıştırmak için kod erişimi güvenlik ayarlarını değiştiremeyeceğinden emin olun. Bunu yapabilirlerse, özel doğrulayıcı çalışmaz ve hiçbir özel durum oluşturulur. Bunu sağlamanın bir yolu için Kod Erişimi Güvenlik İlkesi Aracı'nı levelfinal (Caspol.exe) kullanma seçeneğine bakın.

Daha fazla bilgi için bkz . Kısmi Güven En İyi Yöntemleri ve Desteklenen Dağıtım Senaryoları.

Uç nokta doğrulayıcısını oluşturmak için

  1. yönteminde Validate istenen doğrulama adımlarını içeren bir IEndpointBehavior oluşturun. Aşağıdaki kod bir örnek sağlar. (, InternetClientValidatorBehavior Güvenlik Doğrulama örneğinden alınır.)

    public class InternetClientValidatorBehavior : IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { }
        public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior) { }
        public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) { }
    
        public void Validate(ServiceEndpoint endpoint)
        {
            BindingElementCollection elements = endpoint.Binding.CreateBindingElements();
    
            if (EndpointIsDual(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint uses 'dual' mode. This mode is disallowed for use with untrusted services.");
    
            if (EndpointAllowsNtlm(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint allows NTLM. This mode is disallowed for use with untrusted services.");
    
            if (EndpointAllowsTransactionFlow(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint flows transaction ids. This mode is disallowed for use with untrusted services.");
        }
    
  2. 1. adımda oluşturulan uç nokta doğrulayıcısını kaydeden yeni BehaviorExtensionElement bir oluşturun. Aşağıdaki kod örneği bunu gösterir. (Bu örneğin özgün koduGüvenlik Doğrulama örneği.)

    public class InternetClientValidatorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(InternetClientValidatorBehavior); }
        }
    
        protected override object CreateBehavior()
        {
            return new InternetClientValidatorBehavior();
        }
    }
    
  3. Derlenen derlemenin tanımlayıcı bir adla imzalandığından emin olun. Ayrıntılar için bkz . Tanımlayıcı Ad Aracı (SN.EXE) ve dilinizin derleyici komutları.

Doğrulayıcıyı hedef bilgisayara yüklemek için

  1. Uygun mekanizmayı kullanarak uç nokta doğrulayıcısını yükleyin. Bir kuruluşta bu, Grup İlkesi ve Sistem Yönetimi Sunucusu (SMS) kullanıyor olabilir.

  2. Gacutil.exe (Genel Bütünleştirilmiş Kod Önbelleği Aracı) kullanarak kesin olarak adlandırılmış derlemeyi genel derleme önbelleğine yükleyin.

  3. System.Configuration Ad alanı türlerini kullanarak:

    1. Uzantıyı <tam tür adı kullanarak behaviorExtensions> bölümüne ekleyin ve öğesini kilitleyin.

      // Register our validator configuration element.
      ExtensionsSection extensions
        = machine.GetSection(@"system.serviceModel/extensions") as ExtensionsSection;
      if (extensions == null)
        throw new Exception("not extensions section.");
      ExtensionElement validator
        = new ExtensionElement(
          "internetClientValidator",
          "Microsoft.ServiceModel.Samples.InternetClientValidatorElement, InternetClientValidator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        );
      validator.LockItem = true;
      if (extensions.BehaviorExtensions.IndexOf(validator) < 0)
        extensions.BehaviorExtensions.Add(validator);
      
    2. commonBehaviors> bölümünün özelliğine EndpointBehaviors<behavior öğesini ekleyin ve öğesini kilitleyin. (Doğrulayıcıyı hizmete yüklemek için, doğrulayıcı bir IServiceBehavior ve özelliğine ServiceBehaviors eklenmelidir.) Aşağıdaki kod örneği, a. ve b. adımlarının ardından doğru yapılandırmayı gösterir ve tek istisnası kesin ad olmamasıdır.

      // Add a new section for our validator and lock it down.
      // Behaviors for client applications must be endpoint behaviors.
      // Behaviors for service applications must be service behaviors.
      CommonBehaviorsSection commonBehaviors
        = machine.GetSection(@"system.serviceModel/commonBehaviors") as CommonBehaviorsSection;
      InternetClientValidatorElement internetValidator = new InternetClientValidatorElement();
      internetValidator.LockItem = true;
      commonBehaviors.EndpointBehaviors.Add(internetValidator);
      
    3. machine.config dosyasını kaydedin. Aşağıdaki kod örneği, 3. adımdaki tüm görevleri gerçekleştirir ancak değiştirilmiş machine.config dosyasının bir kopyasını yerel olarak kaydeder.

      // Write to disk.
      machine.SaveAs("newMachine.config");
      
      // Write our new information.
      SectionInformation cBInfo = commonBehaviors.SectionInformation;
      Console.WriteLine(cBInfo.GetRawXml());
      Console.WriteLine(extensions.SectionInformation.GetRawXml());
      Console.Read();
      

Örnek

Aşağıdaki kod örneğinde machine.config dosyasına ortak bir davranış ekleme ve diske bir kopyasını kaydetme gösterilmektedir. InternetClientValidatorBehavior, Güvenlik Doğrulama örneğinden alınır.

Configuration machine = ConfigurationManager.OpenMachineConfiguration();
// Register our validator configuration element.
ExtensionsSection extensions
  = machine.GetSection(@"system.serviceModel/extensions") as ExtensionsSection;
if (extensions == null)
  throw new Exception("not extensions section.");
ExtensionElement validator
  = new ExtensionElement(
    "internetClientValidator",
    "Microsoft.ServiceModel.Samples.InternetClientValidatorElement, InternetClientValidator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
  );
validator.LockItem = true;
if (extensions.BehaviorExtensions.IndexOf(validator) < 0)
  extensions.BehaviorExtensions.Add(validator);

// Add a new section for our validator and lock it down.
// Behaviors for client applications must be endpoint behaviors.
// Behaviors for service applications must be service behaviors.
CommonBehaviorsSection commonBehaviors
  = machine.GetSection(@"system.serviceModel/commonBehaviors") as CommonBehaviorsSection;
InternetClientValidatorElement internetValidator = new InternetClientValidatorElement();
internetValidator.LockItem = true;
commonBehaviors.EndpointBehaviors.Add(internetValidator);
// Write to disk.
machine.SaveAs("newMachine.config");

// Write our new information.
SectionInformation cBInfo = commonBehaviors.SectionInformation;
Console.WriteLine(cBInfo.GetRawXml());
Console.WriteLine(extensions.SectionInformation.GetRawXml());
Console.Read();

.NET Framework Güvenliği

Yapılandırma dosyası öğelerini de şifrelemek isteyebilirsiniz. Daha fazla bilgi için Ayrıca Bkz. bölümüne bakın.

Ayrıca bkz.