Compartilhar via


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 por meio de um comportamento personalizado que examina cada endpoint do serviço, verificando se eles contêm elementos de associação segura. Este exemplo é baseado no Começando.

Observação

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

Comportamento personalizado de validação de ponto de extremidade

Ao adicionar o código de usuário ao método Validate contido na interface IServiceBehavior, é possível dar um comportamento personalizado a um serviço ou endpoint para executar ações definidas pelo usuário. O código a seguir é usado para percorrer cada endpoint contido em um serviço, pesquisando em suas coleções de vinculações por vinculaçõ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 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>

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

Observação

Ao adicionar 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 deste exemplo. Uma exceção é gerada 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 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 neste exemplo. Isso permite que o usuário visualize as exceções geradas pelo comportamento de validação do ponto de extremidade ao abrir 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" adicionado recentemente na categoria "WebHost" na janela Aplicativo para exibir mensagens de ponto de extremidade inseguras.

Configurar, compilar e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação avulsa dos 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 única ou entre máquinas, siga as instruções em Executando os exemplos do Windows Communication Foundation.

Consulte também