Udostępnij za pośrednictwem


Instrukcje: inspekcja zdarzeń zabezpieczeń programu Windows Communication Foundation

Program Windows Communication Foundation (WCF) umożliwia rejestrowanie zdarzeń zabezpieczeń w dzienniku zdarzeń systemu Windows, który można wyświetlić przy użyciu Podgląd zdarzeń systemu Windows. W tym temacie wyjaśniono, jak skonfigurować aplikację tak, aby rejestruje zdarzenia zabezpieczeń. Aby uzyskać więcej informacji na temat inspekcji WCF, zobacz Inspekcja.

Aby przeprowadzić inspekcję zdarzeń zabezpieczeń w kodzie

  1. Określ lokalizację dziennika inspekcji. W tym celu ustaw AuditLogLocation właściwość ServiceSecurityAuditBehavior klasy na jedną z AuditLogLocation wartości wyliczenia, jak pokazano w poniższym kodzie.

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

    Wyliczenie AuditLogLocation ma trzy wartości: Application, lub SecurityDefault. Wartość określa jeden z dzienników widocznych w Podgląd zdarzeń, dziennika zabezpieczeń lub dziennika aplikacji. Jeśli używasz Default wartości, rzeczywisty dziennik będzie zależeć od systemu operacyjnego, na którym działa aplikacja. Jeśli inspekcja jest włączona, a lokalizacja dziennika nie jest określona, wartością domyślną jest Security dziennik dla platform obsługujących zapisywanie w dzienniku zabezpieczeń. W przeciwnym razie zapisze w dzienniku Application . Tylko systemy Windows Server 2003 i Windows Vista domyślnie obsługują zapisywanie w dzienniku zabezpieczeń.

  2. Skonfiguruj typy zdarzeń do inspekcji. Jednocześnie można przeprowadzać inspekcję zdarzeń poziomu usług lub zdarzeń autoryzacji na poziomie komunikatów. W tym celu ustaw ServiceAuthorizationAuditLevel właściwość lub MessageAuthenticationAuditLevel właściwość na jedną z AuditLevel wartości wyliczenia, jak pokazano w poniższym kodzie.

    // 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. Określ, czy należy pominąć lub uwidocznić błędy aplikacji dotyczące zdarzeń inspekcji dziennika. SuppressAuditFailure Ustaw właściwość na true wartość lub false, jak pokazano w poniższym kodzie.

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

    Właściwość domyślna SuppressAuditFailure to true, aby niepowodzenie inspekcji nie miało wpływu na aplikację. W przeciwnym razie jest zgłaszany wyjątek. W przypadku każdej pomyślnej inspekcji zapisywany jest pełny ślad. W przypadku niepowodzenia inspekcji ślad jest zapisywany na poziomie błędu.

  4. Usuń istniejącą z ServiceSecurityAuditBehavior kolekcji zachowań znalezionych w opisie elementu ServiceHost. Dostęp do kolekcji zachowań jest uzyskiwany przez Behaviors właściwość, do której z kolei uzyskuje się dostęp z Description właściwości . Następnie dodaj nowy ServiceSecurityAuditBehavior do tej samej kolekcji, jak pokazano w poniższym kodzie.

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

Aby skonfigurować inspekcję w konfiguracji

  1. Aby skonfigurować inspekcję w konfiguracji, dodaj <element zachowania> do< sekcji zachowania> pliku web.config. Następnie dodaj <element serviceSecurityAudit> i ustaw różne atrybuty, jak pokazano w poniższym przykładzie.

    <behaviors>  
       <behavior name="myAuditBehavior">  
          <serviceSecurityAudit auditLogLocation="Application"  
                suppressAuditFailure="false"
                serviceAuthorizationAuditLevel="None"
                messageAuthenticationAuditLevel="SuccessOrFailure" />  
          </behavior>  
    </behaviors>  
    
  2. Należy określić zachowanie usługi, jak pokazano w poniższym przykładzie.

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

Przykład

Poniższy kod tworzy wystąpienie ServiceHost klasy i dodaje nowy ServiceSecurityAuditBehavior element do swojej kolekcji zachowań.

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

Zabezpieczenia.NET Framework

Ustawienie właściwości na SuppressAuditFailuretrue, pomija wszelkie niepowodzenia generowania inspekcji zabezpieczeń (jeśli ustawiono wartość false, zgłaszany jest wyjątek). Jeśli jednak włączysz następującą właściwość Ustawienia zabezpieczeń lokalnych systemu Windows, niepowodzenie generowania zdarzeń inspekcji spowoduje natychmiastowe zamknięcie systemu Windows:

Inspekcja: Zamknij system natychmiast, jeśli nie można rejestrować inspekcji zabezpieczeń

Aby ustawić właściwość, otwórz okno dialogowe Ustawienia zabezpieczeń lokalnych. W obszarze Zabezpieczenia Ustawienia kliknij pozycję Zasady lokalne. Następnie kliknij pozycję Opcje zabezpieczeń.

Jeśli właściwość jest ustawiona AuditLogLocation na Security i Inspekcja dostępu do obiektów nie jest ustawiona w lokalnych zasadach zabezpieczeń, zdarzenia inspekcji nie zostaną zapisane w dzienniku zabezpieczeń. Należy pamiętać, że nie zostanie zwrócona żadna awaria, ale wpisy inspekcji nie są zapisywane w dzienniku zabezpieczeń.

Zobacz też