Delen via


Beveiligingsvalidatie

Het ServiceValidation-voorbeeld laat zien hoe u een aangepast gedrag gebruikt om services op een computer te valideren om ervoor te zorgen dat ze voldoen aan specifieke criteria. In dit voorbeeld worden services gevalideerd door het aangepaste gedrag door elk eindpunt in de service te scannen en te controleren of ze beveiligde bindingselementen bevatten. Dit voorbeeld is gebaseerd op aan de slag.

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

Aangepast gedrag voor eindpuntvalidatie

Door gebruikerscode toe te voegen aan de Validate methode in de IServiceBehavior interface, kan aangepast gedrag worden gegeven aan een service of eindpunt om door de gebruiker gedefinieerde acties uit te voeren. De volgende code wordt gebruikt om elk eindpunt in een service te doorlopen, waarmee de bindingverzamelingen worden doorzocht op beveiligde bindingen.

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.");
    }
}

Als u de volgende code toevoegt aan het Web.config-bestand, wordt de serviceValidate gedragsextensie toegevoegd die de service kan herkennen.

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

Zodra de gedragsextensie is toegevoegd aan de service, is het nu mogelijk om het endpointValidate gedrag toe te voegen aan de lijst met gedragingen in het web.config-bestand en dus aan de service.

<behaviors>
    <serviceBehaviors>
        <behavior name="CalcServiceSEB1">
            <serviceMetadata httpGetEnabled="true" />
            <endpointValidate />
        </behavior>
    </serviceBehaviors>
</behaviors>

Gedrag en de bijbehorende extensies die worden toegevoegd aan het Web.config-bestand, zijn van toepassing op afzonderlijke services, terwijl wanneer ze worden toegevoegd aan het bestand Machine.config gedrag toepassen op elke service die actief is op de computer.

Notitie

Wanneer u gedrag toevoegt aan alle services, wordt u aangeraden een back-up te maken van het bestand Machine.config voordat u wijzigingen aanbrengt.

Voer nu de client uit die is opgegeven in de map client\bin van dit voorbeeld. Er wordt een uitzondering gegenereerd met het volgende bericht: 'De aangevraagde service http://localhost/servicemodelsamples/service.svc kan niet worden geactiveerd'. Dit wordt verwacht omdat een eindpunt als onveilig wordt beschouwd door het eindpunt dat gedrag valideert en voorkomt dat de service wordt gestart. Het gedrag genereert ook een interne uitzondering die beschrijft welk eindpunt onveilig is en schrijft een bericht naar het systeem Logboeken onder de bron System.ServiceModel 4.0.0.0 en de categorie WebHost. Het is ook mogelijk om tracering in te schakelen voor de service in dit voorbeeld. Hierdoor kan de gebruiker de uitzonderingen bekijken die worden gegenereerd door eindpuntvalidatiegedrag door de resulterende servicetraceringen te openen met behulp van het hulpprogramma Service Trace Viewer.

Uitzonderingsberichten voor eindpuntvalidatie weergeven in de Logboeken

  1. Klik op het startmenu en selecteer Uitvoeren.

  2. Typ eventvwr en klik op OK.

  3. Klik in het venster Logboeken op Toepassing.

  4. Dubbelklik op de onlangs toegevoegde gebeurtenis System.ServiceModel 4.0.0.0 onder de categorie WebHost in het toepassingsvenster om onveilige eindpuntberichten weer te geven.

Het voorbeeld instellen, bouwen en uitvoeren

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  3. Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.

Zie ook