Validação de segurança

O exemplo ServiceValidation demonstra como usar um comportamento personalizado para validar serviços em um computador para garantir que eles atendam a critérios específicos. Neste exemplo, os serviços são validados pelo comportamento personalizado examinando cada ponto de extremidade no serviço e verificando se eles contêm elementos de vinculação seguros. Este exemplo é baseado em Introdução.

Nota

O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.

Comportamento personalizado de validação de ponto final

Ao adicionar código de usuário ao Validate método contido na interface, o IServiceBehavior comportamento personalizado pode ser dado a um serviço ou ponto de extremidade para executar ações definidas pelo usuário. O código a seguir é usado para percorrer cada ponto de extremidade contido em um serviço, que procura associações seguras em suas coleções de vinculação.

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

Adicionar o código a seguir ao arquivo Web.config adiciona a extensão de serviceValidate comportamento para o serviço reconhecer.

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

Uma vez que a extensão de comportamento é adicionada ao serviço, agora é possível adicionar o endpointValidate comportamento à lista de comportamentos no arquivo Web.config e, portanto, ao serviço.

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

Os comportamentos e suas extensões que são adicionados ao arquivo Web.config aplicam o comportamento a serviços individuais, enquanto quando adicionados ao arquivo Machine.config aplicam o comportamento a cada serviço ativo no computador.

Nota

Ao adicionar comportamento a todos os serviços, sugere-se fazer backup do arquivo Machine.config antes de fazer qualquer alteração.

Agora execute o cliente fornecido no diretório client\bin deste exemplo. Uma exceção é lançada com a seguinte mensagem: "O serviço http://localhost/servicemodelsamples/service.svc solicitado não pôde ser ativado". Isso é esperado porque um ponto de extremidade é considerado inseguro pelo comportamento de validação do ponto de extremidade e impede que o serviço seja iniciado. O comportamento também lança uma exceção interna que descreve qual ponto de extremidade é inseguro e grava uma mensagem no Visualizador de Eventos do sistema na fonte "System.ServiceModel 4.0.0.0" e na categoria "WebHost". Também é possível ativar o rastreamento no serviço neste exemplo. Isso permite que o usuário visualize as exceções geradas pelo comportamento de validação do ponto de extremidade abrindo os rastreamentos de serviço resultantes usando a ferramenta Visualizador de Rastreamento de Serviço.

Exibir mensagens de exceção de validação de ponto de extremidade com falha no Visualizador de Eventos

  1. Clique no menu Iniciar e selecione Executar.

  2. Digite eventvwr e clique em OK.

  3. Na janela Visualizador de Eventos, clique em Aplicativo.

  4. Clique duas vezes no evento "System.ServiceModel 4.0.0.0" recentemente adicionado na categoria "WebHost" na janela Aplicativo para exibir mensagens de ponto de extremidade inseguras.

Configurar, compilar e executar o exemplo

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.

Consulte também