Säkerhetsverifiering
ServiceValidation-exemplet visar hur du använder ett anpassat beteende för att verifiera tjänster på en dator för att säkerställa att de uppfyller specifika kriterier. I det här exemplet verifieras tjänsterna av det anpassade beteendet genom att genomsöka varje slutpunkt i tjänsten och kontrollera om de innehåller säkra bindningselement. Det här exemplet baseras på Komma igång.
Kommentar
Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.
Anpassat beteende för slutpunktsverifiering
Genom att lägga till användarkod i Validate
metoden i IServiceBehavior gränssnittet kan anpassade beteenden ges till en tjänst eller slutpunkt för att utföra användardefinierade åtgärder. Följande kod används för att loopa igenom varje slutpunkt som finns i en tjänst, som söker igenom deras bindningssamlingar efter säkra bindningar.
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.");
}
}
Om du lägger till följande kod i web.config-filen läggs beteendetillägget serviceValidate
för tjänsten att känna igen.
<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>
När beteendetillägget har lagts till i tjänsten är det nu möjligt att lägga endpointValidate
till beteendet i listan över beteenden i filen Web.config och därmed till tjänsten.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Beteenden och deras tillägg som läggs till i web.config-filen tillämpar beteende för enskilda tjänster, medan när de läggs till i filen Machine.config tillämpas beteendet på varje tjänst som är aktiv på datorn.
Kommentar
När du lägger till beteende i alla tjänster föreslås att du säkerhetskopierar filen Machine.config innan du gör någon ändring.
Kör nu klienten som finns i katalogen client\bin i det här exemplet. Ett undantag utlöses med följande meddelande: "Det gick inte att aktivera den begärda tjänsten http://localhost/servicemodelsamples/service.svc
." Detta förväntas eftersom en slutpunkt anses osäker av slutpunktens valideringsbeteende och förhindrar att tjänsten startas. Beteendet utlöser också ett internt undantag som beskriver vilken slutpunkt som är osäker och skriver ett meddelande till systemet Loggboken under källan "System.ServiceModel 4.0.0.0" och kategorin "WebHost". Det går också att aktivera spårning på tjänsten i det här exemplet. På så sätt kan användaren visa undantag som genereras av slutpunktsverifierande beteende genom att öppna de resulterande tjänstspårningarna med hjälp av verktyget Tjänstspårningsvisning.
Visa misslyckade slutpunktsverifieringsfelmeddelanden i Loggboken
Klicka på Start-menyn och välj Kör.
Skriv
eventvwr
och klicka på OK.I fönstret Loggboken klickar du på Program.
Dubbelklicka på den nyligen tillagda händelsen "System.ServiceModel 4.0.0.0" under kategorin "WebHost" i programfönstret för att visa osäkra slutpunktsmeddelanden.
Konfigurera, skapa och köra exemplet
Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.
Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.