Delen via


Procedure: Windows Communication Foundation-beveiligingsgebeurtenissen controleren

Met Windows Communication Foundation (WCF) kunt u beveiligingsgebeurtenissen vastleggen in het Windows-gebeurtenislogboek, dat kan worden weergegeven met behulp van de Windows-Logboeken. In dit onderwerp wordt uitgelegd hoe u een toepassing zo instelt dat er beveiligingsevenementen worden vastgelegd. Zie Controle voor meer informatie over WCF-controle.

Beveiligingsgebeurtenissen in code controleren

  1. Geef de locatie van het auditlogboek op. Hiervoor stelt u de AuditLogLocation eigenschap van de ServiceSecurityAuditBehavior klasse in op een van de AuditLogLocation opsommingswaarden, zoals wordt weergegeven in de volgende code.

    // Create a new auditing behavior and set the log location.
    ServiceSecurityAuditBehavior newAudit =
        new ServiceSecurityAuditBehavior();
    newAudit.AuditLogLocation =
        AuditLogLocation.Application;
    
    ' Create a new auditing behavior and set the log location.
    Dim newAudit As New ServiceSecurityAuditBehavior()
    newAudit.AuditLogLocation = AuditLogLocation.Application
    

    De AuditLogLocation opsomming heeft drie waarden: Application, Securityof Default. De waarde geeft een van de logboeken op die zichtbaar zijn in de Logboeken, ofwel het beveiligingslogboek of het toepassingslogboek. Als u de Default waarde gebruikt, is het werkelijke logboek afhankelijk van het besturingssysteem waarop de toepassing wordt uitgevoerd. Als controle is ingeschakeld en de logboeklocatie niet is opgegeven, is Security het standaardlogboek voor platforms die ondersteuning bieden voor het schrijven naar het beveiligingslogboek. Anders wordt er naar het Application logboek geschreven. Alleen Windows Server 2003 en Windows Vista ondersteunen standaard het schrijven naar het beveiligingslogboek.

  2. Stel de typen gebeurtenissen in die moeten worden gecontroleerd. U kunt gebeurtenissen op serviceniveau of autorisatiegebeurtenissen op berichtniveau tegelijk controleren. Hiervoor stelt u de ServiceAuthorizationAuditLevel eigenschap of eigenschap MessageAuthenticationAuditLevel in op een van de AuditLevel opsommingswaarden, zoals wordt weergegeven in de volgende code.

    // Create a new auditing behavior and set the log location.
    ServiceSecurityAuditBehavior newAudit =
        new ServiceSecurityAuditBehavior();
    newAudit.AuditLogLocation =
        AuditLogLocation.Application;
    newAudit.MessageAuthenticationAuditLevel =
        AuditLevel.SuccessOrFailure;
    newAudit.ServiceAuthorizationAuditLevel =
        AuditLevel.SuccessOrFailure;
    
    newAudit.MessageAuthenticationAuditLevel = _
        AuditLevel.SuccessOrFailure
    newAudit.ServiceAuthorizationAuditLevel = _
        AuditLevel.SuccessOrFailure
    
  3. Geef op of fouten in de toepassing moeten worden onderdrukt of weergegeven met betrekking tot auditgebeurtenissen in logboeken. Stel de SuppressAuditFailure eigenschap in op of falsetrue , zoals wordt weergegeven in de volgende code.

    // Create a new auditing behavior and set the log location.
    ServiceSecurityAuditBehavior newAudit =
        new ServiceSecurityAuditBehavior();
    newAudit.AuditLogLocation =
        AuditLogLocation.Application;
    newAudit.MessageAuthenticationAuditLevel =
        AuditLevel.SuccessOrFailure;
    newAudit.ServiceAuthorizationAuditLevel =
        AuditLevel.SuccessOrFailure;
    newAudit.SuppressAuditFailure = false;
    
    newAudit.SuppressAuditFailure = False
    

    De standaardeigenschap SuppressAuditFailure is true, zodat de fout bij het controleren niet van invloed is op de toepassing. Anders wordt er een uitzondering gegenereerd. Voor een geslaagde controle wordt een uitgebreide tracering geschreven. Voor elke fout bij het controleren wordt de tracering geschreven op foutniveau.

  4. Verwijder de bestaande ServiceSecurityAuditBehavior uit de verzameling gedrag die in de beschrijving van een ServiceHost. De gedragverzameling wordt geopend door de Behaviors eigenschap, die op zijn beurt toegankelijk is vanuit de Description eigenschap. Voeg vervolgens de nieuwe ServiceSecurityAuditBehavior toe aan dezelfde verzameling, zoals wordt weergegeven in de volgende code.

    // Remove the old behavior and add the new.
    serviceHost.Description.
        Behaviors.Remove<ServiceSecurityAuditBehavior>();
    serviceHost.Description.Behaviors.Add(newAudit);
    
    ' Remove the old behavior and add the new.
    serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior)
    serviceHost.Description.Behaviors.Add(newAudit)
    

Controle instellen in configuratie

  1. Als u controle in de configuratie wilt instellen, voegt u een <gedragselement> toe aan de< sectie gedrag> van het web.config-bestand. Voeg vervolgens een <serviceSecurityAudit-element> toe en stel de verschillende kenmerken in, zoals wordt weergegeven in het volgende voorbeeld.

    <behaviors>  
       <behavior name="myAuditBehavior">  
          <serviceSecurityAudit auditLogLocation="Application"  
                suppressAuditFailure="false"
                serviceAuthorizationAuditLevel="None"
                messageAuthenticationAuditLevel="SuccessOrFailure" />  
          </behavior>  
    </behaviors>  
    
  2. U moet het gedrag voor de service opgeven, zoals wordt weergegeven in het volgende voorbeeld.

    <services>  
        <service type="WCS.Samples.Service.Echo"
        behaviorConfiguration=" myAuditBehavior">  
           <endpoint address=""  
                    binding="wsHttpBinding"  
                    bindingConfiguration="CertificateDefault"
                    contract="WCS.Samples.Service.IEcho" />  
        </service>  
    </services>  
    

Opmerking

Met de volgende code maakt u een exemplaar van de ServiceHost klasse en voegt u een nieuw ServiceSecurityAuditBehavior exemplaar toe aan de verzameling gedrag.

public static void Main()
{
    // Get base address from appsettings in configuration.
    Uri baseAddress = new Uri(ConfigurationManager.
        AppSettings["baseAddress"]);

    // Create a ServiceHost for the CalculatorService type
    // and provide the base address.
    using (ServiceHost serviceHost = new
        ServiceHost(typeof(CalculatorService), baseAddress))
    {
        // Create a new auditing behavior and set the log location.
        ServiceSecurityAuditBehavior newAudit =
            new ServiceSecurityAuditBehavior();
        newAudit.AuditLogLocation =
            AuditLogLocation.Application;
        newAudit.MessageAuthenticationAuditLevel =
            AuditLevel.SuccessOrFailure;
        newAudit.ServiceAuthorizationAuditLevel =
            AuditLevel.SuccessOrFailure;
        newAudit.SuppressAuditFailure = false;
        // Remove the old behavior and add the new.
        serviceHost.Description.
            Behaviors.Remove<ServiceSecurityAuditBehavior>();
        serviceHost.Description.Behaviors.Add(newAudit);
        // Open the ServiceHostBase to create listeners
        // and start listening for messages.
        serviceHost.Open();

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

        // Close the ServiceHostBase to shutdown the service.
        serviceHost.Close();
    }
}
Public Shared Sub Main()
    ' Get base address from appsettings in configuration.
    Dim baseAddress As New Uri(ConfigurationManager.AppSettings("baseAddress"))

    ' Create a ServiceHost for the CalculatorService type 
    ' and provide the base address.
    Dim serviceHost As New ServiceHost(GetType(CalculatorService), baseAddress)
    Try
        ' Create a new auditing behavior and set the log location.
        Dim newAudit As New ServiceSecurityAuditBehavior()
        newAudit.AuditLogLocation = AuditLogLocation.Application
        newAudit.MessageAuthenticationAuditLevel = _
            AuditLevel.SuccessOrFailure
        newAudit.ServiceAuthorizationAuditLevel = _
            AuditLevel.SuccessOrFailure
        newAudit.SuppressAuditFailure = False
        ' Remove the old behavior and add the new.
        serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior)
        serviceHost.Description.Behaviors.Add(newAudit)
        ' Open the ServiceHostBase to create listeners 
        ' and start listening for messages.
        serviceHost.Open()

        ' The service can now be accessed.
        Console.WriteLine("The service is ready.")
        Console.WriteLine("Press <ENTER> to terminate service.")
        Console.WriteLine()
        Console.ReadLine()

        ' Close the ServiceHostBase to shutdown the service.
        serviceHost.Close()
    Finally
    End Try

End Sub

.NET Framework-beveiliging

Als u de SuppressAuditFailure eigenschap trueinstelt op , onderdrukt u eventuele fouten bij het genereren van beveiligingscontroles (indien ingesteld op false, wordt er een uitzondering gegenereerd). Als u echter de volgende eigenschap lokale beveiligingsinstelling van Windows inschakelt, zorgt een fout bij het genereren van controlegebeurtenissen ervoor dat Windows onmiddellijk wordt afgesloten:

Controle: Systeem onmiddellijk afsluiten als er geen beveiligingscontroles kunnen worden geregistreerd

Als u de eigenschap wilt instellen, opent u het dialoogvenster Lokale beveiliging Instellingen. Klik onder Beveiliging Instellingen op Lokaal beleid. Klik vervolgens op Beveiligingsopties.

Als de AuditLogLocation eigenschap is ingesteld op Security en De toegang tot het auditobject niet is ingesteld in het lokale beveiligingsbeleid, worden controlegebeurtenissen niet naar het beveiligingslogboek geschreven. Houd er rekening mee dat er geen fout wordt geretourneerd, maar controlevermeldingen worden niet naar het beveiligingslogboek geschreven.

Zie ook