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
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."); }
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(); } }
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
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).
Nainstalujte sestavení se silným názvem do globální mezipaměti sestavení pomocí Gacutil.exe (nástroj globální mezipaměti sestavení).
System.Configuration Typy oborů názvů použijte k:
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);
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 doServiceBehaviors
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);
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é.