Dela via


Anvisningar: Låsa slutpunkter i företaget

Stora företag kräver ofta att program utvecklas i enlighet med företagets säkerhetsprinciper. I följande avsnitt beskrivs hur du utvecklar och installerar en klientslutpunktsverifiering som kan användas för att verifiera alla Windows Communication Foundation-klientprogram (WCF) som är installerade på datorer.

I det här fallet är validatorn en klientverifierare eftersom det här slutpunktsbeteendet läggs till i avsnittet commonBehaviors <> i filen machine.config. WCF läser endast in vanliga slutpunktsbeteenden för klientprogram och läser endast in vanliga tjänstbeteenden för tjänstprogram. Om du vill installera samma validator för tjänstprogram måste validatorn vara ett tjänstbeteende. Mer information finns i avsnittet commonBehaviors>.<

Viktigt!

Tjänst- eller slutpunktsbeteenden som inte har markerats med AllowPartiallyTrustedCallersAttribute attributet (APTCA) som läggs till i< avsnittet commonBehaviors i en konfigurationsfil> körs inte när programmet körs i en partiell förtroendemiljö och inget undantag utlöses när detta inträffar. Om du vill framtvinga körning av vanliga beteenden, till exempel validatorer, måste du antingen:

  • Markera ditt vanliga beteende med AllowPartiallyTrustedCallersAttribute attributet så att det kan köras när det distribueras som ett partiellt förtroendeprogram. Observera att en registerpost kan ställas in på datorn för att förhindra att APTCA-markerade sammansättningar körs..

  • Kontrollera att om programmet distribueras som ett fullständigt betrott program kan användarna inte ändra säkerhetsinställningarna för kodåtkomst för att köra programmet i en partiell förtroendemiljö. Om de kan göra det körs inte den anpassade validatorn och inget undantag genereras. Ett sätt att säkerställa detta finns i levelfinal alternativet med kodåtkomstsäkerhetsprincipverktyget (Caspol.exe).

Mer information finns i Metodtips för partiellt förtroende och distributionsscenarier som stöds.

Skapa slutpunktsverifieraren

  1. Skapa ett IEndpointBehavior med önskade valideringssteg i Validate metoden. Följande kod innehåller ett exempel. (Är InternetClientValidatorBehavior hämtat från säkerhetsverifieringsexemplet.)

    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. Skapa en ny BehaviorExtensionElement som registrerar slutpunktsverifieraren som skapades i steg 1. Följande kodexempel visar detta. (Den ursprungliga koden för det här exemplet finns i Exempel på säkerhetsverifiering .)

    public class InternetClientValidatorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(InternetClientValidatorBehavior); }
        }
    
        protected override object CreateBehavior()
        {
            return new InternetClientValidatorBehavior();
        }
    }
    
  3. Kontrollera att den kompilerade sammansättningen är signerad med ett starkt namn. Mer information finns i verktyget Starkt namn (SN.EXE) och kompilatorkommandona för ditt språk.

Så här installerar du validatorn på måldatorn

  1. Installera slutpunktsverifieringen med lämplig mekanism. I ett företag kan detta vara att använda grupprincip och systemhanteringsserver (SMS).

  2. Installera den starkt namngivna sammansättningen i den globala sammansättningscachen med hjälp av Gacutil.exe (Global Assembly Cache Tool).

  3. Använd namnområdestyperna System.Configuration för att:

    1. Lägg till tillägget i <avsnittet behaviorExtensions> med hjälp av ett fullständigt kvalificerat typnamn och lås elementet.

      // 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. Lägg till beteendeelementet i EndpointBehaviors egenskapen för <avsnittet commonBehaviors> och lås elementet. (Om du vill installera validatorn på tjänsten måste validatorn vara en IServiceBehavior och läggas till i ServiceBehaviors egenskapen.) I följande kodexempel visas rätt konfiguration efter steg a. och b., med det enda undantaget att det inte finns något starkt namn.

      // 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. Spara filen machine.config. Följande kodexempel utför alla uppgifter i steg 3 men sparar en kopia av den ändrade filen machine.config lokalt.

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

Exempel

I följande kodexempel visas hur du lägger till ett vanligt beteende i filen machine.config och sparar en kopia på disken. InternetClientValidatorBehavior Hämtas från exemplet för säkerhetsverifiering.

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-säkerhet

Du kanske också vill kryptera konfigurationsfilelementen. Mer information finns i avsnittet Se även.

Se även