Partilhar via


Como: Bloquear pontos de extremidade na empresa

As grandes empresas geralmente exigem que os aplicativos sejam desenvolvidos em conformidade com as políticas de segurança corporativas. O tópico a seguir discute como desenvolver e instalar um validador de ponto de extremidade cliente que pode ser usado para validar todos os aplicativos cliente do Windows Communication Foundation (WCF) instalados em computadores.

Nesse caso, o validador é um validador de cliente porque esse comportamento de ponto de extremidade é adicionado à seção commonBehaviors> do cliente <no arquivo machine.config. O WCF carrega comportamentos de ponto de extremidade comuns somente para aplicativos cliente e carrega comportamentos de serviço comuns somente para aplicativos de serviço. Para instalar esse mesmo validador para aplicativos de serviço, o validador deve ser um comportamento de serviço. Para obter mais informações, consulte a seção commonBehaviors>.<

Importante

Os comportamentos de serviço ou ponto de extremidade não marcados com o AllowPartiallyTrustedCallersAttribute atributo (APTCA) que são adicionados à <seção commonBehaviors> de um arquivo de configuração não são executados quando o aplicativo é executado em um ambiente de confiança parcial e nenhuma exceção é lançada quando isso ocorre. Para impor a execução de comportamentos comuns, como validadores, você deve:

  • Marque seu comportamento comum com o atributo para que ele possa ser executado quando implantado AllowPartiallyTrustedCallersAttribute como um aplicativo de confiança parcial. Observe que uma entrada do Registro pode ser definida no computador para impedir que assemblies marcados com APTCA sejam executados.

  • Certifique-se de que, se o aplicativo for implantado como um aplicativo totalmente confiável, os usuários não poderão modificar as configurações de segurança de acesso ao código para executar o aplicativo em um ambiente de Confiança Parcial. Se eles puderem fazer isso, o validador personalizado não será executado e nenhuma exceção será lançada. Para obter uma maneira de garantir isso, consulte a opção usando a Ferramenta de Política de Segurança de Acesso ao levelfinal Código (Caspol.exe).

Para obter mais informações, consulte Práticas recomendadas de confiança parcial e cenários de implantação suportados.

Para criar o validador de ponto de extremidade

  1. Crie um IEndpointBehavior com as etapas de validação desejadas no Validate método. O código a seguir fornece um exemplo. (O InternetClientValidatorBehavior é retirado do exemplo de Validação de Segurança .)

    public class InternetClientValidatorBehavior : IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { }
        public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior) { }
        public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) { }
    
        public void Validate(ServiceEndpoint endpoint)
        {
            BindingElementCollection elements = endpoint.Binding.CreateBindingElements();
    
            if (EndpointIsDual(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint uses 'dual' mode. This mode is disallowed for use with untrusted services.");
    
            if (EndpointAllowsNtlm(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint allows NTLM. This mode is disallowed for use with untrusted services.");
    
            if (EndpointAllowsTransactionFlow(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint flows transaction ids. This mode is disallowed for use with untrusted services.");
        }
    
  2. Crie um novo BehaviorExtensionElement que registre o validador de ponto de extremidade criado na etapa 1. O exemplo de código a seguir mostra isso. (O código original para este exemplo está no Exemplo de Validação de Segurança .)

    public class InternetClientValidatorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(InternetClientValidatorBehavior); }
        }
    
        protected override object CreateBehavior()
        {
            return new InternetClientValidatorBehavior();
        }
    }
    
  3. Verifique se o assembly compilado está assinado com um nome forte. Para obter detalhes, consulte a Strong Name Tool (SN.EXE) e os comandos do compilador para seu idioma.

Para instalar o validador no computador de destino

  1. Instale o validador de ponto final usando o mecanismo apropriado. Em uma empresa, isso pode ser usado usando a Diretiva de Grupo e o Systems Management Server (SMS).

  2. Instale o assembly com nome forte no cache de assembly global usando a Gacutil.exe (Global Assembly Cache Tool).

  3. Use os System.Configuration tipos de namespace para:

    1. Adicione a extensão à <seção behaviorExtensions> usando um nome de tipo totalmente qualificado e bloqueie o elemento.

      // Register our validator configuration element.
      ExtensionsSection extensions
        = machine.GetSection(@"system.serviceModel/extensions") as ExtensionsSection;
      if (extensions == null)
        throw new Exception("not extensions section.");
      ExtensionElement validator
        = new ExtensionElement(
          "internetClientValidator",
          "Microsoft.ServiceModel.Samples.InternetClientValidatorElement, InternetClientValidator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        );
      validator.LockItem = true;
      if (extensions.BehaviorExtensions.IndexOf(validator) < 0)
        extensions.BehaviorExtensions.Add(validator);
      
    2. Adicione o elemento behavior à EndpointBehaviors propriedade da <seção commonBehaviors> e bloqueie o elemento. (Para instalar o validador no serviço, o validador deve ser um IServiceBehavior e adicionado à ServiceBehaviors propriedade.) O exemplo de código a seguir mostra a configuração adequada após as etapas a. e b., com a única exceção de que não há um nome forte.

      // Add a new section for our validator and lock it down.
      // Behaviors for client applications must be endpoint behaviors.
      // Behaviors for service applications must be service behaviors.
      CommonBehaviorsSection commonBehaviors
        = machine.GetSection(@"system.serviceModel/commonBehaviors") as CommonBehaviorsSection;
      InternetClientValidatorElement internetValidator = new InternetClientValidatorElement();
      internetValidator.LockItem = true;
      commonBehaviors.EndpointBehaviors.Add(internetValidator);
      
    3. Salve o arquivo machine.config. O exemplo de código a seguir executa todas as tarefas na etapa 3, mas salva uma cópia do arquivo machine.config modificado localmente.

      // Write to disk.
      machine.SaveAs("newMachine.config");
      
      // Write our new information.
      SectionInformation cBInfo = commonBehaviors.SectionInformation;
      Console.WriteLine(cBInfo.GetRawXml());
      Console.WriteLine(extensions.SectionInformation.GetRawXml());
      Console.Read();
      

Exemplo

O exemplo de código a seguir mostra como adicionar um comportamento comum ao arquivo machine.config e salvar uma cópia no disco. O InternetClientValidatorBehavior é retirado do exemplo de Validação de Segurança .

Configuration machine = ConfigurationManager.OpenMachineConfiguration();
// Register our validator configuration element.
ExtensionsSection extensions
  = machine.GetSection(@"system.serviceModel/extensions") as ExtensionsSection;
if (extensions == null)
  throw new Exception("not extensions section.");
ExtensionElement validator
  = new ExtensionElement(
    "internetClientValidator",
    "Microsoft.ServiceModel.Samples.InternetClientValidatorElement, InternetClientValidator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
  );
validator.LockItem = true;
if (extensions.BehaviorExtensions.IndexOf(validator) < 0)
  extensions.BehaviorExtensions.Add(validator);

// Add a new section for our validator and lock it down.
// Behaviors for client applications must be endpoint behaviors.
// Behaviors for service applications must be service behaviors.
CommonBehaviorsSection commonBehaviors
  = machine.GetSection(@"system.serviceModel/commonBehaviors") as CommonBehaviorsSection;
InternetClientValidatorElement internetValidator = new InternetClientValidatorElement();
internetValidator.LockItem = true;
commonBehaviors.EndpointBehaviors.Add(internetValidator);
// Write to disk.
machine.SaveAs("newMachine.config");

// Write our new information.
SectionInformation cBInfo = commonBehaviors.SectionInformation;
Console.WriteLine(cBInfo.GetRawXml());
Console.WriteLine(extensions.SectionInformation.GetRawXml());
Console.Read();

Segurança do .NET Framework

Você também pode querer criptografar os elementos do arquivo de configuração. Para obter mais informações, consulte a seção Consulte também.

Consulte também