Instrukcje: blokowanie punktów końcowych w przedsiębiorstwie
Duże przedsiębiorstwa często wymagają, aby aplikacje zostały opracowane zgodnie z zasadami zabezpieczeń przedsiębiorstwa. W poniższym temacie omówiono sposób tworzenia i instalowania modułu sprawdzania poprawności punktu końcowego klienta, który może służyć do weryfikowania wszystkich aplikacji klienckich programu Windows Communication Foundation (WCF) zainstalowanych na komputerach.
W takim przypadku moduł sprawdzania poprawności jest modułem sprawdzania poprawności klienta, ponieważ to zachowanie punktu końcowego jest dodawane do sekcji commonBehaviors> klienta <w pliku machine.config. Program WCF ładuje typowe zachowania punktów końcowych tylko dla aplikacji klienckich i ładuje typowe zachowania usługi tylko dla aplikacji usług. Aby zainstalować ten sam moduł sprawdzania poprawności dla aplikacji usług, moduł sprawdzania poprawności musi być zachowaniem usługi. Aby uzyskać więcej informacji, zobacz sekcję <commonBehaviors> .
Ważne
Zachowania usługi lub punktu końcowego nie są oznaczone atrybutem AllowPartiallyTrustedCallersAttribute (APTCA), które są dodawane do <sekcji commonBehaviors> pliku konfiguracji, nie są uruchamiane, gdy aplikacja działa w środowisku częściowego zaufania i nie jest zgłaszany wyjątek w takim przypadku. Aby wymusić uruchamianie typowych zachowań, takich jak moduły sprawdzania poprawności, należy wykonać jedną z następujących czynności:
Oznacz typowe zachowanie za pomocą atrybutu , aby można było go uruchomić po wdrożeniu AllowPartiallyTrustedCallersAttribute jako aplikacja częściowego zaufania. Należy pamiętać, że na komputerze można ustawić wpis rejestru, aby zapobiec uruchamianiu zestawów oznaczonych przez aptCA.
Upewnij się, że jeśli aplikacja jest wdrożona jako w pełni zaufana aplikacja, której użytkownicy nie mogą modyfikować ustawień zabezpieczeń dostępu do kodu w celu uruchomienia aplikacji w środowisku częściowego zaufania. Jeśli to zrobią, niestandardowy moduł sprawdzania poprawności nie zostanie uruchomiony i nie zostanie zgłoszony żaden wyjątek. Aby upewnić się, że jest to możliwe, zobacz
levelfinal
opcję przy użyciu narzędzia zasad zabezpieczeń dostępu kodu (Caspol.exe).
Aby uzyskać więcej informacji, zobacz Częściowe najlepsze rozwiązania dotyczące zaufania i Obsługiwane scenariusze wdrażania.
Aby utworzyć moduł sprawdzania poprawności punktu końcowego
Utwórz element IEndpointBehavior z żądanymi krokami walidacji w metodzie Validate . Poniższy kod zawiera przykład. (Element
InternetClientValidatorBehavior
jest pobierany z przykładu weryfikacji zabezpieczeń).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."); }
Utwórz nowy BehaviorExtensionElement , który rejestruje moduł sprawdzania poprawności punktu końcowego utworzony w kroku 1. Poniższy przykład kodu pokazuje to. (Oryginalny kod dla tego przykładu znajduje się w pliku Przykład weryfikacji zabezpieczeń).
public class InternetClientValidatorElement : BehaviorExtensionElement { public override Type BehaviorType { get { return typeof(InternetClientValidatorBehavior); } } protected override object CreateBehavior() { return new InternetClientValidatorBehavior(); } }
Upewnij się, że skompilowany zestaw jest podpisany przy użyciu silnej nazwy. Aby uzyskać szczegółowe informacje, zobacz Narzędzie silnej nazwy (SN.EXE) i polecenia kompilatora dla języka.
Aby zainstalować moduł sprawdzania poprawności na komputerze docelowym
Zainstaluj moduł sprawdzania poprawności punktu końcowego przy użyciu odpowiedniego mechanizmu. W przedsiębiorstwie może to być serwer zarządzania zasadami grupy i systemami (SMS).
Zainstaluj silnie nazwany zestaw w globalnej pamięci podręcznej zestawów przy użyciu narzędzia Gacutil.exe (globalna pamięć podręczna zestawów).
System.Configuration Użyj typów przestrzeni nazw, aby:
Dodaj rozszerzenie do <sekcji behaviorExtensions> przy użyciu w pełni kwalifikowanej nazwy typu i zablokuj element.
// 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);
Dodaj element zachowania do
EndpointBehaviors
właściwości <sekcji commonBehaviors> i zablokuj element. (Aby zainstalować moduł sprawdzania poprawności w usłudze, moduł sprawdzania poprawności musi być elementem IServiceBehavior i dodanymServiceBehaviors
do właściwości ). Poniższy przykład kodu przedstawia właściwą konfigurację po wykonaniu kroków a i b., z jedynym wyjątkiem, że nie ma silnej nazwy.// 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);
Zapisz plik machine.config. Poniższy przykład kodu wykonuje wszystkie zadania w kroku 3, ale zapisuje lokalnie kopię zmodyfikowanego pliku machine.config.
// 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();
Przykład
Poniższy przykład kodu pokazuje, jak dodać typowe zachowanie do pliku machine.config i zapisać kopię na dysku. Element InternetClientValidatorBehavior
jest pobierany z przykładu Weryfikacja zabezpieczeń.
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();
Zabezpieczenia.NET Framework
Możesz również zaszyfrować elementy pliku konfiguracji. Aby uzyskać więcej informacji, zobacz sekcję Zobacz też.