Compartilhar via


Validação de segurança

A amostra de ServiceValidation demonstra como usar um comportamento personalizado para validar serviços em um computador para garantir que eles atendam a critérios específicos. Nesta amostra, 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 associação seguros. Esta amostra é baseada na Introdução.

Observação

O procedimento de instalação e as instruções de compilação dessa amostra estão no final deste tópico.

Comportamento personalizado de validação de ponto de extremidade

Ao adicionar o código do usuário ao método Validate contido na interface IServiceBehavior, o 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 pesquisa por meio de suas coleções de associação para associações seguras.

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

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

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

Comportamentos e suas extensões adicionadas ao arquivo Web.config aplicam comportamento a serviços individuais, enquanto quando adicionados ao arquivo Machine.config aplicam o comportamento a todos os serviços ativos no computador.

Observação

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

Agora, execute o cliente fornecido no diretório client\bin desta amostra. Uma exceção é gerada com a seguinte mensagem: “O serviço solicitado http://localhost/servicemodelsamples/service.svc 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 gera uma exceção interna que descreve qual ponto de extremidade é inseguro e grava uma mensagem no Visualizador de Eventos do sistema na origem do “System.ServiceModel 4.0.0.0” e na categoria “WebHost”. Também é possível ativar o rastreamento no serviço nesta amostra. Isso permite que o usuário exiba 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 do Visualizador de Eventos, clique em Aplicativo.

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

Configurar, compilar e executar a amostra

  1. Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de computador único ou de vários computadores, siga as instruções em Como executar os exemplos do Windows Communication Foundation.

Confira também