Compatibilidade de recursos de confiança parcial
O Windows Communication Foundation (WCF) oferece suporte a um subconjunto limitado de funcionalidades quando executado em um ambiente parcialmente confiável. Os recursos suportados na confiança parcial são projetados em torno de um conjunto específico de cenários, conforme descrito no tópico Cenários de implantação suportados.
Requisitos mínimos de permissão
O WCF oferece suporte a um subconjunto de recursos em aplicativos executados sob 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 em tempo de execução.
Contratos
Os contratos estão sujeitos às seguintes restrições quando executados sob confiança parcial:
A classe de serviço que implementa a
[ServiceContract]
interface deve serpublic
e ter umpublic
construtor. Se define[OperationContract]
métodos, estes devem serpublic
. Se, em vez disso, implementar uma[ServiceContract]
interface, essas implementações de método podem ser explícitas ouprivate
, desde que a[ServiceContract]
interface sejapublic
.Ao usar o
[ServiceKnownType]
atributo, o método especificado deve serpublic
.[MessageContract]
classes e seus membros podem serpublic
. Se a[MessageContract]
classe é definida no assembly do aplicativo, ela pode serinternal
e terinternal
membros.
Ligações fornecidas pelo sistema
Os BasicHttpBinding e WebHttpBinding são totalmente suportados em um ambiente de confiança parcial. O WSHttpBinding é suportado apenas para o modo de segurança de Transporte.
Não há suporte para associações que usam transportes diferentes de HTTP, como o NetTcpBinding, o NetNamedPipeBinding, ou o NetMsmqBinding, quando executadas em um ambiente de confiança parcial.
Ligações personalizadas
As 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 ligação de transporte permitidos são HttpTransportBindingElement e HttpsTransportBindingElement.
Codificadores
São permitidos os seguintes codificadores:
O codificador de texto (TextMessageEncodingBindingElement).
O codificador binário (BinaryMessageEncodingBindingElement).
O codificador de mensagem da Web (WebMessageEncodingBindingElement).
Os codificadores MTOM (Message Transmission Optimization Mechanism) não são suportados.
Segurança
Aplicativos parcialmente confiáveis podem usar os recursos de segurança de nível de transporte do WCF para proteger sua comunicação. A segurança no nível da mensagem não é suportada. Configurar uma associação para usar a segurança no nível da mensagem resulta em uma exceção em tempo de execução.
Ligações não suportadas
Não há suporte para ligações que usam mensagens confiáveis, transações ou segurança no nível da mensagem.
Serialização
Tanto o quanto o DataContractSerializer são suportados XmlSerializer em um ambiente de confiança parcial. No entanto, a utilização do DataContractSerializer medicamento está sujeita às seguintes condições:
Todos os tipos serializáveis
[DataContract]
devem serpublic
.Todos os campos ou propriedades serializáveis
[DataMember]
em um[DataContract]
tipo devem ser públicos e leitura/gravação. A serialização e desserialização de campos não é suportadareadonly
ao executar WCF em um aplicativo parcialmente confiável.O
[Serializable]
modelo de programação /ISerializable não é suportado em um ambiente de confiança parcial.Os tipos conhecidos devem ser especificados no código ou na configuração no nível da máquina (machine.config). Os tipos conhecidos não podem ser especificados na configuração no nível do aplicativo por motivos de segurança.
Os tipos que implementam IObjectReference lançam 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 ambos e IEnumerable<T> IEnumerable. Os exemplos incluem tipos que implementam ICollection<T>o . Esses tipos podem implementar uma public
implementação de GetEnumerator()
, e uma implementação explícita de GetEnumerator()
. Neste caso, DataContractSerializer invoca a public
implementação de GetEnumerator()
, e não a implementação explícita de GetEnumerator()
. Se nenhuma das GetEnumerator()
implementações for public
e todas forem implementações explícitas, então DataContractSerializer invoca IEnumerable.GetEnumerator()
.
Para tipos de coleção quando o WCF está sendo executado em um ambiente de confiança parcial, se nenhuma das GetEnumerator()
implementações for public
, ou nenhuma delas for implementações de interface explícitas, uma exceção de segurança será lançada.
NetDataContractSerializer
Muitos tipos de coleção do .NET Framework como List<T>, Dictionary<TKey,TValue> ArrayListe Hashtable não são suportados NetDataContractSerializer pela confiança parcial. Esses tipos têm o [Serializable]
atributo definido e, conforme indicado anteriormente na seção Serialização, esse atributo não é suportado na confiança parcial. O DataContractSerializer trata as coleções de uma forma especial e, portanto, é capaz de contornar essa restrição, mas não NetDataContractSerializer tem esse mecanismo para contornar essa restrição.
O DateTimeOffset tipo não é suportado NetDataContractSerializer pela confiança parcial.
Um substituto não pode ser usado com o NetDataContractSerializer (usando o SurrogateSelector mecanismo) quando executado em confiança parcial. Observe que essa restrição se aplica ao uso de um substituto, não à serialização.
Habilitando a execução de comportamentos comuns
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, você deve executar uma das seguintes opções:
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 comportamento não será executado e nenhuma exceção será lançada. Para garantir isso, consulte a opção levelfinal usando Caspol.exe (Code Access Security Policy Tool).
Para obter um exemplo de um comportamento comum, consulte Como bloquear pontos de extremidade na empresa.
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
. Para 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 a 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
As extensões de configuração só são suportadas quando executadas em Confiança Total.
Diagnóstico
Registo de Eventos
O log de eventos limitado é suportado sob confiança parcial. Somente falhas de ativação de serviço e falhas de rastreamento/registro de mensagens 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.
Registo de Mensagens
O log de mensagens não funciona quando o WCF é executado em um ambiente de confiança parcial. Se ativado sob confiança parcial, ele não falhará na ativação do serviço, mas nenhuma mensagem será registrada.
Rastreio
A funcionalidade de rastreamento restrito está disponível quando executada em um ambiente de confiança parcial. <listeners>
No elemento no arquivo de configuração, os únicos tipos que você pode adicionar são TextWriterTraceListener e o novo EventSchemaTraceListener. O uso da norma XmlWriterTraceListener pode resultar em logs incompletos ou incorretos.
As fontes de rastreamento suportadas 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:
Espaço CardSpace
Os seguintes membros da TraceOptions enumeração 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 a saída para gravar rastreamento TextWriterTraceListener em um arquivo de texto, verifique se o aplicativo tem a FileIOPermission necessária para gravar com êxito no arquivo de rastreamento.
Nota
Para evitar inundar os arquivos de rastreamento com erros duplicados, o WCF desabilita o rastreamento do recurso ou ação após a primeira falha de segurança. Há um rastreamento de exceção para cada acesso de recurso com falha, a primeira vez que é feita uma tentativa de acessar o recurso ou executar a ação.
Host de serviço WCF
O host de serviço WCF não oferece suporte à confiança parcial. Se você quiser usar um serviço WCF em confiança parcial, não use o modelo WCF Service Library Project no Visual Studio para criar seu serviço. Em vez disso, crie um novo 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 a confiança parcial do WCF é suportada.
Outras Limitações
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 Aplicativo de Navegador XAML (XBAP), ele estará sujeito a limitações de XBAP, conforme descrito em Segurança de 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:
Windows Management Instrumentation (WMI)
O registo de eventos está apenas parcialmente ativado (consulte a discussão na secção Diagnóstico).
Contadores de desempenho
O uso de recursos do WCF que não são suportados 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 que uma informação ou ação não está disponível quando executada em um ambiente de confiança parcial é tentar acessar o recurso ou fazer a ação dentro de um try
bloco e, em seguida catch
, a falha. Para evitar inundar os arquivos de rastreamento com erros duplicados, o WCF desabilita o rastreamento do recurso ou ação após a primeira falha de segurança. Há um rastreamento de exceção para cada acesso de recurso com falha, a primeira vez que é feita uma tentativa de acessar o recurso ou executar a ação.