Share via


Procedure: Eindpunten vergrendelen in de onderneming

Grote ondernemingen vereisen vaak dat toepassingen worden ontwikkeld in overeenstemming met het beveiligingsbeleid voor ondernemingen. In het volgende onderwerp wordt beschreven hoe u een validator voor clienteindpunten ontwikkelt en installeert die kan worden gebruikt om alle WCF-clienttoepassingen (Windows Communication Foundation) te valideren die op computers zijn geïnstalleerd.

In dit geval is de validator een clientvalidator omdat dit eindpuntgedrag wordt toegevoegd aan de sectie commonBehaviors> van de client <in het bestand machine.config. WCF laadt algemeen eindpuntgedrag alleen voor clienttoepassingen en laadt algemene servicegedrag alleen voor servicetoepassingen. Als u dezelfde validator wilt installeren voor servicetoepassingen, moet de validator een servicegedrag zijn. Zie de <sectie commonBehaviors> voor meer informatie.

Belangrijk

Service- of eindpuntgedrag dat niet is gemarkeerd met het AllowPartiallyTrustedCallersAttribute kenmerk (APTCA) dat wordt toegevoegd aan de <commonBehaviors-sectie> van een configuratiebestand, worden niet uitgevoerd wanneer de toepassing wordt uitgevoerd in een gedeeltelijke vertrouwensomgeving en er wordt geen uitzondering gegenereerd wanneer dit gebeurt. Als u het uitvoeren van veelvoorkomend gedrag zoals validaties wilt afdwingen, moet u het volgende doen:

  • Markeer uw algemene gedrag met het AllowPartiallyTrustedCallersAttribute kenmerk, zodat het kan worden uitgevoerd wanneer deze wordt geïmplementeerd als een gedeeltelijke vertrouwenstoepassing. Houd er rekening mee dat een registervermelding op de computer kan worden ingesteld om te voorkomen dat met APTCA gemarkeerde assembly's worden uitgevoerd.

  • Zorg ervoor dat als de toepassing is geïmplementeerd als een volledig vertrouwde toepassing, gebruikers de beveiligingsinstellingen voor codetoegang niet kunnen wijzigen om de toepassing uit te voeren in een gedeeltelijke vertrouwensomgeving. Als ze dit kunnen doen, wordt de aangepaste validator niet uitgevoerd en wordt er geen uitzondering gegenereerd. Zie de levelfinal optie Code Access Security Policy Tool (Caspol.exe) voor een manier om dit te controleren.

Zie Aanbevolen procedures voor gedeeltelijke vertrouwensrelaties en ondersteunde implementatiescenario's voor meer informatie.

De eindpuntvalidator maken

  1. Maak een IEndpointBehavior met de gewenste validatiestappen in de Validate methode. De volgende code bevat een voorbeeld. (De InternetClientValidatorBehavior is afkomstig uit het voorbeeld van de beveiligingsvalidatie .)

    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. Maak nieuwe BehaviorExtensionElement die de eindpuntvalidator registreert die in stap 1 is gemaakt. In het volgende codevoorbeeld ziet u dit. (De oorspronkelijke code voor dit voorbeeld bevindt zich in de Voorbeeld van beveiligingsvalidatie .)

    public class InternetClientValidatorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(InternetClientValidatorBehavior); }
        }
    
        protected override object CreateBehavior()
        {
            return new InternetClientValidatorBehavior();
        }
    }
    
  3. Zorg ervoor dat de gecompileerde assembly is ondertekend met een sterke naam. Zie het hulpprogramma Sterke naam (SN.EXE) en de compileropdrachten voor uw taal voor meer informatie.

De validator installeren op de doelcomputer

  1. Installeer de eindpuntvalidator met behulp van het juiste mechanisme. In een onderneming kan dit gebruikmaken van groepsbeleid en systeembeheerserver (SMS).

  2. Installeer de sterk benoemde assembly in de globale assemblycache met behulp van het Gacutil.exe (Global Assembly Cache Tool).

  3. Gebruik de System.Configuration naamruimtetypen om:

    1. Voeg de extensie toe aan de <sectie behaviorExtensions> met behulp van een volledig gekwalificeerde typenaam en vergrendel het 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);
      
    2. Voeg het gedragselement toe aan de eigenschap van de EndpointBehaviors<sectie commonBehaviors> en vergrendel het element. (Als u de validator op de service wilt installeren, moet de validator een IServiceBehavior en toegevoegd aan de ServiceBehaviors eigenschap zijn.) In het volgende codevoorbeeld ziet u de juiste configuratie na stap a. en b., met de enige uitzondering dat er geen sterke naam is.

      // 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. Sla het bestand machine.config op. In het volgende codevoorbeeld worden alle taken in stap 3 uitgevoerd, maar wordt een kopie van het gewijzigde bestand machine.config lokaal opgeslagen.

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

Opmerking

In het volgende codevoorbeeld ziet u hoe u een gemeenschappelijk gedrag toevoegt aan het bestand machine.config en een kopie opslaat op de schijf. De InternetClientValidatorBehavior code wordt opgehaald uit het voorbeeld van de beveiligingsvalidatie .

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-beveiliging

U kunt ook de elementen van het configuratiebestand versleutelen. Zie de sectie Zie ook voor meer informatie.

Zie ook