Compatibilidade da funcionalidade de confiança parcial
O WCF (Windows Communication Foundation) dá suporte a um subconjunto limitado de funcionalidade ao ser executado em um ambiente parcialmente confiável. Os recursos com suporte na confiança parcial foram projetados em torno de um conjunto específico de cenários, conforme descrito no tópico Cenários de implantação com suporte.
Requisitos mínimos de permissão
O WCF dá suporte a um subconjunto de recursos em aplicativos em execução em qualquer um dos seguintes conjuntos de permissões nomeados padrão:
Permissões de Confiança Média
Permissões da Zona da Internet
A tentativa de usar o WCF em aplicativos parcialmente confiáveis com permissões mais restritivas pode resultar em exceções de segurança no tempo de execução.
Contratos
Os contratos estão sujeitos às seguintes restrições ao serem executados sob confiança parcial:
A classe de serviço que implementa a interface
[ServiceContract]
deve serpublic
e ter um construtorpublic
. Se ele definir métodos[OperationContract]
, eles deverão serpublic
. Se, em vez disso, ele implementar uma interface[ServiceContract]
, essas implementações de método poderão ser explícitas ouprivate
, desde que a interface[ServiceContract]
sejapublic
.Ao usar o atributo
[ServiceKnownType]
, o método especificado deve serpublic
.As classes
[MessageContract]
e seus membros podem serpublic
. Se a classe[MessageContract]
for definida no assembly do aplicativo, ela poderá serinternal
e ter membrosinternal
.
Associações fornecidas pelo sistema
O BasicHttpBinding e o WebHttpBinding têm suporte completo em um ambiente de confiança parcial. O WSHttpBinding tem suporte apenas para o modo de segurança do transporte.
Associações que usam transportes diferentes de HTTP, como NetTcpBinding, NetNamedPipeBinding ou NetMsmqBinding não têm suporte ao executar em um ambiente de confiança parcial.
Associações personalizadas
Associações personalizadas podem ser criadas e usadas em um ambiente de confiança parcial, mas devem seguir as restrições especificadas nesta seção.
Transportes
Os únicos elementos de associação de transporte permitidos são HttpTransportBindingElement e HttpsTransportBindingElement.
Codificadores
Os seguintes codificadores são permitidos:
O codificador de texto (TextMessageEncodingBindingElement).
O codificador binário (BinaryMessageEncodingBindingElement).
O codificador da mensagem da Web (WebMessageEncodingBindingElement).
Não há suporte para codificadores MTOM (Mecanismo de Otimização de Transmissão de Mensagens).
Segurança
Aplicativos parcialmente confiáveis podem usar os recursos de segurança no nível do transporte do WCF para proteger sua comunicação. Não há suporte para segurança no nível da mensagem. Configurar uma associação para usar a segurança no nível da mensagem resulta em uma exceção em tempo de execução.
Associações sem suporte
Não há suporte para associações que usam mensagens confiáveis, transações ou segurança no nível da mensagem.
Serialização
Tanto DataContractSerializer quanto XmlSerializer são suportados em um ambiente de confiança parcial. No entanto, usar DataContractSerializer está sujeito às seguintes condições:
Todos os tipos serializáveis
[DataContract]
devem serpublic
.Todos os campos ou propriedades serializáveis
[DataMember]
em um tipo[DataContract]
devem ser públicos e de leitura/gravação. Não há suporte para a serialização e desserialização de camposreadonly
ao executar o WCF em um aplicativo parcialmente confiável.Não há suporte para o modelo de programação
[Serializable]
/ISerializable em um ambiente de confiança parcial.Os tipos conhecidos devem ser especificados na configuração de código ou de nível de máquina (machine.config). Tipos conhecidos não podem ser especificados na configuração no nível do aplicativo por motivos de segurança.
Tipos que implementam IObjectReference geram uma exceção em um ambiente parcialmente confiável.
Consulte a seção Serialização em Práticas recomendadas de confiança parcial para obter mais informações sobre segurança ao usar DataContractSerializer com segurança em um aplicativo parcialmente confiável.
Tipos de coleção
Alguns tipos de coleção implementam IEnumerable<T> e IEnumerable. Exemplos incluem tipos que implementam ICollection<T>. Esses tipos podem implementar uma implementação public
de GetEnumerator()
e uma implementação explícita de GetEnumerator()
. Nesse caso, DataContractSerializer invoca a implementação public
de GetEnumerator()
, e não a implementação explícita de GetEnumerator()
. Se nenhuma das implementações GetEnumerator()
for public
e todas forem implementações explícitas, DataContractSerializer invocará IEnumerable.GetEnumerator()
.
Para tipos de coleção quando o WCF está em execução em um ambiente de confiança parcial, se nenhuma das implementações GetEnumerator()
for public
ou nenhuma delas forem implementações explícitas da interface, uma exceção de segurança será gerada.
NetDataContractSerializer
Muitos tipos de coleção do .NET Framework como List<T>, ArrayList, Dictionary<TKey,TValue> e Hashtable, não têm suporte do NetDataContractSerializer em confiança parcial. Esses tipos têm o atributos [Serializable]
definido e, conforme mencionado anteriormente na seção Serialização, esse atributo não tem suporte na confiança parcial. O DataContractSerializer trata as coleções de maneira especial e, portanto, é capaz de contornar essa restrição, mas o NetDataContractSerializer não tem esse mecanismo para contornar essa restrição.
O tipo DateTimeOffset não tem suporte do NetDataContractSerializer na confiança parcial.
Um substituto não pode ser usado com o NetDataContractSerializer (usando o mecanismo SurrogateSelector) ao ser executado em confiança parcial. Observe que essa restrição se aplica ao uso de um substituto, não à serialização.
Habilitando comportamentos comuns a serem executados
Os comportamentos do serviço ou do ponto de extremidade não marcados com o atributo AllowPartiallyTrustedCallersAttribute (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 é gerada quando isso ocorre. Para impor a execução de comportamentos comuns, você deve executar uma das seguintes opções:
Marcar o comportamento comum com o atributo AllowPartiallyTrustedCallersAttribute para que ele possa ser executado quando implantado como um aplicativo de confiança parcial. Observar que uma entrada do Registro pode ser definida no computador para impedir que os assemblies marcados com APTCA sejam executados. .
Verificar se o aplicativo foi implantado como um aplicativo totalmente confiável do qual os usuários não podem modificar as configurações de segurança de acesso do código para executá-lo em um ambiente de confiança parcial. Se eles puderem fazer isso, o comportamento não será executado e nenhuma exceção será gerada. Para garantir isso, confira a opção levelfinal usando a Caspol.exe (Ferramenta de Política de Segurança de Acesso de Código).
Para ver um exemplo de comportamento comum, consulte Como bloquear pontos de extremidade no Enterprise.
Configuração
Com uma exceção, o código parcialmente confiável só pode carregar seções de configuração do WCF no arquivo local app.config
. Carregar seções de configuração do WCF que fazem referência a seções do WCF em machine.config ou em um arquivo web.config raiz requer ConfigurationPermission(Unrestricted). Sem essa permissão, as referências às seções de configuração do WCF (comportamentos, associações) fora do arquivo de configuração local resultam em uma exceção quando a configuração é carregada.
A única exceção é a configuração de tipo conhecido para serialização, conforme descrito na seção Serialização deste tópico.
Importante
Só há suporte para extensões de configuração durante a execução em Confiança Total.
Diagnósticos
Log de eventos
Há suporte para o registro em log de eventos limitados em confiança parcial. Somente falhas de ativação de serviço e falhas de log de rastreamento/mensagem são registradas no Log de Eventos. O número máximo de eventos que podem ser registrados por um processo é 5, para evitar gravar mensagens excessivas no Log de Eventos.
Registro em log de mensagens
O log de mensagens não funciona quando o WCF é executado em um ambiente de confiança parcial. Se habilitado sob confiança parcial, ele não falhará na ativação do serviço, mas nenhuma mensagem será registrada.
Rastreamento
A funcionalidade de rastreamento restrito está disponível ao ser executada em um ambiente de confiança parcial. No elemento <listeners>
no arquivo de configuração, os únicos tipos que você pode adicionar são TextWriterTraceListener e o novo EventSchemaTraceListener. O uso do XmlWriterTraceListener padrão pode resultar em logs incompletos ou incorretos.
As fontes de rastreamento com suporte são:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors e System.IdentityModel.Tokens.
Não há suporte para as seguintes fontes de rastreamento:
Os seguintes membros da enumeração TraceOptions não devem ser especificados:
Ao usar o rastreamento em um ambiente de confiança parcial, verifique se o aplicativo tem permissões suficientes para armazenar a saída do ouvinte de rastreamento. Por exemplo, ao usar o TextWriterTraceListener para gravar a saída de rastreamento em um arquivo de texto, verifique se o aplicativo tem o FileIOPermission necessário para gravar com êxito no arquivo de rastreamento.
Observação
Para evitar inundar os arquivos de rastreamento com erros duplicados, o WCF desabilita o rastreamento do recurso ou da ação após a primeira falha de segurança. Há um rastreamento de exceção para cada acesso a recursos com falha na primeira vez que é feita uma tentativa de acessar o recurso ou executar a ação.
Host de Serviço do WCF
O host de serviço do WCF não dá suporte à confiança parcial. Caso deseje usar um serviço WCF na confiança parcial, não use o modelo do Projeto de Biblioteca de Serviço WCF no Visual Studio para criar seu serviço. Em vez disso, crie um site no Visual Studio escolhendo o modelo de site do serviço WCF, que pode hospedar o serviço em um servidor Web no qual há suporte para a confiança parcial do WCF.
Outras limitações
O WCF geralmente é limitado às considerações de segurança impostas a ele pelo aplicativo de hospedagem. Por exemplo, se o WCF estiver hospedado em um XBAP (Aplicativo de Navegador XAML), ele estará sujeito a limitações de XBAP, conforme descrito em Segurança da confiança parcial do Windows Presentation Foundation.
Os seguintes recursos adicionais não são habilitados ao executar o indigo2 em um ambiente de confiança parcial:
WMI (Instrumentação de Gerenciamento do Windows)
O log de eventos só está parcialmente habilitado (consulte a discussão na seção Diagnóstico).
Contadores de desempenho
O uso de recursos do WCF que não têm suporte em um ambiente de confiança parcial pode resultar em exceções em tempo de execução.
Recursos não listados
A melhor maneira de descobrir se uma informação ou ação não está disponível durante a execução em um ambiente de confiança parcial é tentar acessar o recurso ou executar a ação dentro de um bloco try
e, em seguida, catch
a falha. Para evitar inundar os arquivos de rastreamento com erros duplicados, o WCF desabilita o rastreamento do recurso ou da ação após a primeira falha de segurança. Há um rastreamento de exceção para cada acesso a recursos com falha na primeira vez que é feita uma tentativa de acessar o recurso ou executar a ação.