Walidacja zabezpieczeń
W przykładzie ServiceValidation pokazano, jak używać niestandardowego zachowania do weryfikowania usług na komputerze, aby upewnić się, że spełniają określone kryteria. W tym przykładzie usługi są weryfikowane przez zachowanie niestandardowe przez skanowanie poszczególnych punktów końcowych w usłudze i sprawdzanie, czy zawierają one bezpieczne elementy powiązania. Ten przykład jest oparty na rozpoczynaniu pracy.
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Niestandardowe zachowanie walidacji punktu końcowego
Dodając kod użytkownika do metody zawartej Validate
w interfejsie IServiceBehavior , zachowanie niestandardowe może być podane do usługi lub punktu końcowego w celu wykonywania akcji zdefiniowanych przez użytkownika. Poniższy kod służy do pętli dla każdego punktu końcowego zawartego w usłudze, który przeszukuje kolekcje powiązań pod kątem bezpiecznych powiązań.
public void Validate(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
// Loop through each endpoint individually, gathering their
// binding elements.
foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints)
{
secureElementFound = false;
// Retrieve the endpoint's binding element collection.
BindingElementCollection bindingElements =
endpoint.Binding.CreateBindingElements();
// Look to see if the binding elements collection contains any
// secure binding elements. Transport, Asymmetric, and Symmetric
// binding elements are all derived from SecurityBindingElement.
if ((bindingElements.Find<SecurityBindingElement>() != null) || (bindingElements.Find<HttpsTransportBindingElement>() != null) || (bindingElements.Find<WindowsStreamSecurityBindingElement>() != null) || (bindingElements.Find<SslStreamSecurityBindingElement>() != null))
{
secureElementFound = true;
}
// Send a message to the system event viewer when an endpoint is deemed insecure.
if (!secureElementFound)
throw new Exception(System.DateTime.Now.ToString() + ": The endpoint \"" + endpoint.Name + "\" has no secure bindings.");
}
}
Dodanie następującego kodu do pliku Web.config dodaje serviceValidate
rozszerzenie zachowania dla usługi do rozpoznawania.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
...
</system.serviceModel>
Po dodaniu rozszerzenia zachowania do usługi można teraz dodać endpointValidate
zachowanie do listy zachowań w pliku Web.config, a tym samym do usługi.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Zachowania i ich rozszerzenia dodane do pliku Web.config stosują zachowanie do poszczególnych usług, podczas gdy dodanie do pliku Machine.config stosuje zachowanie do każdej usługi aktywnej na komputerze.
Uwaga
Podczas dodawania zachowania do wszystkich usług zaleca się utworzenie kopii zapasowej pliku Machine.config przed wprowadzeniem jakiejkolwiek zmiany.
Teraz uruchom klienta udostępnionego w katalogu client\bin tego przykładu. Zgłaszany jest wyjątek z następującym komunikatem: "Nie można aktywować żądanej usługi http://localhost/servicemodelsamples/service.svc
". Jest to oczekiwane, ponieważ punkt końcowy jest uznawany za niezabezpieczony przez zachowanie sprawdzania poprawności punktu końcowego i uniemożliwia uruchomienie usługi. Zachowanie zgłasza również wyjątek wewnętrzny opisujący, który punkt końcowy jest niezabezpieczony i zapisuje komunikat w systemie Podgląd zdarzeń w kategorii "System.ServiceModel 4.0.0.0" i kategorii "WebHost". Istnieje również możliwość włączenia śledzenia w usłudze w tym przykładzie. Dzięki temu użytkownik może wyświetlić wyjątki zgłaszane przez punkt końcowy sprawdzania poprawności zachowania, otwierając wynikowe ślady usługi przy użyciu narzędzia Podgląd śledzenia usługi.
Wyświetlanie komunikatów wyjątków weryfikacji punktu końcowego, których nie można wykonać w Podgląd zdarzeń
Kliknij menu Start i wybierz pozycję Uruchom.
Wpisz
eventvwr
i kliknij przycisk OK.W oknie Podgląd zdarzeń kliknij pozycję Aplikacja.
Kliknij dwukrotnie ostatnio dodane zdarzenie "System.ServiceModel 4.0.0.0" w kategorii "WebHost" w oknie Aplikacja , aby wyświetlić niezabezpieczone komunikaty punktu końcowego.
Konfigurowanie, kompilowanie i uruchamianie przykładu
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.