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
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
, lubSecurity
Default
. Wartość określa jeden z dzienników widocznych w Podgląd zdarzeń, dziennika zabezpieczeń lub dziennika aplikacji. Jeśli używaszDefault
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ą jestSecurity
dziennik dla platform obsługujących zapisywanie w dzienniku zabezpieczeń. W przeciwnym razie zapisze w dziennikuApplication
. Tylko systemy Windows Server 2003 i Windows Vista domyślnie obsługują zapisywanie w dzienniku zabezpieczeń.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
Określ, czy należy pominąć lub uwidocznić błędy aplikacji dotyczące zdarzeń inspekcji dziennika. SuppressAuditFailure Ustaw właściwość na
true
wartość lubfalse
, 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
totrue
, 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.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
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>
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ń.