Sdílet prostřednictvím


Postupy: Uzamknutí koncových bodů v podniku

Velké podniky často vyžadují, aby aplikace byly vyvinuty v souladu se zásadami zabezpečení podniku. Následující téma popisuje, jak vyvíjet a instalovat validátor koncového bodu klienta, který lze použít k ověření všech klientských aplikací Windows Communication Foundation (WCF) nainstalovaných na počítačích.

V tomto případě je validátor klientem validátor, protože toto chování koncového bodu se přidá do části commonBehaviors> klienta <v souboru machine.config. WCF načte běžné chování koncových bodů pouze pro klientské aplikace a načte běžné chování služby pouze pro aplikace služeb. Aby bylo možné nainstalovat stejný validátor pro aplikace služeb, musí být validátor chováním služby. Další informace najdete v části CommonBehaviors>.<

Důležité

Chování služby nebo koncového bodu není označené atributem AllowPartiallyTrustedCallersAttribute (APTCA), které jsou přidány do <části CommonBehaviors> konfiguračního souboru, se nespustí, když se aplikace spustí v prostředí s částečnou důvěryhodností, a pokud k tomu dojde, není vyvolána žádná výjimka. Pokud chcete vynutit spouštění běžných chování, jako jsou validátory, musíte:

  • Označte běžné chování atributem AllowPartiallyTrustedCallersAttribute , aby se mohlo spustit při nasazení jako aplikace s částečnou důvěryhodností. Všimněte si, že položku registru lze nastavit v počítači, aby se zabránilo spuštění sestavení označených aptca..

  • Ujistěte se, že pokud je aplikace nasazená jako plně důvěryhodná aplikace, kterou uživatelé nemohou upravit nastavení zabezpečení přístupu kódu tak, aby aplikace běžela v prostředí částečné důvěryhodnosti. Pokud je to možné, vlastní validátor se nespustí a nevyvolá se žádná výjimka. Jedním ze způsobů, jak to zajistit, najdete v levelfinal možnosti pomocí nástroje zásad zabezpečení přístupu kódu (Caspol.exe).

Další informace najdete v tématu Osvědčené postupy částečné důvěryhodnosti a podporované scénáře nasazení.

Vytvoření validátoru koncového bodu

  1. Vytvořte v metodě požadovaný IEndpointBehavior postup Validate ověření. Následující kód obsahuje příklad. (Pochází InternetClientValidatorBehavior z ukázky ověření zabezpečení.)

    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. Vytvořte nový BehaviorExtensionElement , který zaregistruje validátor koncového bodu vytvořený v kroku 1. Následující příklad kódu ukazuje toto. (Původní kód pro tento příklad je v Ukázka ověření zabezpečení.)

    public class InternetClientValidatorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(InternetClientValidatorBehavior); }
        }
    
        protected override object CreateBehavior()
        {
            return new InternetClientValidatorBehavior();
        }
    }
    
  3. Ujistěte se, že je kompilované sestavení podepsané silným názvem. Podrobnosti najdete v nástroji Strong Name (SN.EXE) a příkazy kompilátoru pro váš jazyk.

Instalace validátoru do cílového počítače

  1. Nainstalujte validátor koncového bodu pomocí příslušného mechanismu. V podniku to může být použití zásad skupiny a serveru pro správu systémů (SMS).

  2. Nainstalujte sestavení se silným názvem do globální mezipaměti sestavení pomocí Gacutil.exe (nástroj globální mezipaměti sestavení).

  3. System.Configuration Typy oborů názvů použijte k:

    1. Přidejte rozšíření do oddílu <behaviorExtensions> pomocí plně kvalifikovaného názvu typu a uzamkněte prvek.

      // 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. Přidejte element chování do EndpointBehaviors vlastnosti <commonBehaviors> oddílu a uzamkněte prvek. (Chcete-li do služby nainstalovat validátor, musí být validátor a IServiceBehavior přidán do ServiceBehaviors vlastnosti.) Následující příklad kódu ukazuje správnou konfiguraci po krocích a. a b., s jedinou výjimkou, že neexistuje žádný silný název.

      // 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. Uložte soubor machine.config. Následující příklad kódu provede všechny úlohy v kroku 3, ale uloží kopii upraveného souboru machine.config místně.

      // 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();
      

Příklad

Následující příklad kódu ukazuje, jak přidat běžné chování do souboru machine.config a uložit kopii na disk. Pochází InternetClientValidatorBehavior z ukázky ověření zabezpečení.

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();

Zabezpečení rozhraní .NET Framework

Můžete také chtít zašifrovat elementy konfiguračního souboru. Další informace najdete v části Viz také.

Viz také