Compatibilidad de característica de confianza parcial
Windows Communication Foundation (WCF) admite un subconjunto limitado de funcionalidad cuando se ejecuta en un entorno de confianza parcial. Las características admitidas en confianza parcial están diseñadas alrededor de un conjunto concreto de escenarios, tal y como se describe en el tema Escenarios de implementación admitidos.
Requisitos mínimos de permiso
WCF admite un subconjunto de características en aplicaciones que se ejecutan bajo cualquiera de los conjuntos de permisos con nombre estándares:
Permisos de nivel de confianza medio
Permisos de zona de Internet
Al intentar usar WCF en aplicaciones de confianza parcial con permisos más restrictivos, pueden producirse excepciones de seguridad en tiempo de ejecución.
Contratos
Los contratos están sujetos a las restricciones siguientes cuando se ejecutan bajo confianza parcial:
La clase de servicio que implementa la interfaz
[ServiceContract]
debe ser public y tener un constructor public. Si define los métodos[OperationContract]
, éstos deben ser public. Si en su lugar implementa una interfaz[ServiceContract]
, esas implementaciones de método pueden ser explícitas o private, siempre y cuando la interfaz[ServiceContract]
sea public.Al usar el atributo
[ServiceKnownType]
, el método especificado debe ser public.Las clases
[MessageContract]
y sus miembros pueden ser public. Si la clase[MessageContract]
se define en el ensamblado de aplicación puede ser internal y tener miembros internal.
Enlaces proporcionados por el sistema
BasicHttpBinding y WebHttpBinding se admiten totalmente en un entorno de confianza parcial. WSHttpBinding solo se admite para el modo de seguridad de transporte.
Los enlaces que utilizan transportes distintos a HTTP, como NetTcpBinding, NetNamedPipeBindingo NetMsmqBinding, no se admiten al ejecutarse en un entorno de confianza parcial.
Enlaces personalizados
Se pueden crear y usar enlaces personalizados en un entorno de confianza parcial, pero deben seguir las restricciones especificadas en esta sección.
Transportes
Los únicos elementos de enlace de transporte permitidos son HttpTransportBindingElement y HttpsTransportBindingElement.
Codificadores
Se permiten los codificadores siguientes:
El codificador de texto (TextMessageEncodingBindingElement).
El codificador binario (BinaryMessageEncodingBindingElement).
El codificador del mensaje web (WebMessageEncodingBindingElement).
No se admiten los codificadores del mecanismo de optimización de transmisión del mensaje (MTOM).
Seguridad
Las aplicaciones de confianza parcial pueden utilizar las características de seguridad de nivel de transporte de WCF para proteger su comunicación. No se admite la seguridad de nivel de mensaje. Al configurar un enlace para que use la seguridad de nivel de mensaje, se produce una excepción en tiempo de ejecución.
Enlaces no admitidos
No se admiten los enlaces que utilizan mensajería confiable, transacciones o seguridad del nivel de mensaje.
Serialización
Tanto DataContractSerializer como XmlSerializer se admiten en un entorno de confianza parcial. Sin embargo, el uso de DataContractSerializer está sujeto a las condiciones siguientes:
Todos los tipos
[DataContract]
serializables deben ser public.Todos los campos
[DataMember]
serializables o propiedades en un tipo[DataContract]
deben ser públicos y de lectura/escritura. No se admite la serialización y deserialización de los campos readonly al ejecutar WCF en una aplicación de confianza parcial.El modelo de programación
[Serializable]
/ISerializable no se admite en un entorno de confianza parcial.Los tipos conocidos se deben especificar mediante código o configuración del nivel de equipo (machine.config). Los tipos conocidos no se pueden especificar en la configuración del nivel de de aplicación por razones de seguridad.
Los tipos que implementan IObjectReference inician una excepción en un entorno de confianza parcial.
Consulte la sección relativa a la serialización en el tema Procedimientos recomendados de confianza parcial para obtener más información sobre la seguridad al usar DataContractSerializer de manera segura en una aplicación de confianza parcial.
Tipos de colección
Algunos tipos de colección implementan IEnumerable y IEnumerable. Los ejemplos incluyen tipos que implementan ICollection. Tales tipos pueden implementar una implementación public de GetEnumerator()
y una implementación explícita de GetEnumerator()
. En este caso, DataContractSerializer invoca la implementación public de GetEnumerator()
y no la implementación explícita de GetEnumerator()
. Si ninguna de las implementaciones de GetEnumerator()
es public y todas son implementaciones explícitas, DataContractSerializer
invoca a IEnumerable.GetEnumerator()
.
Para los tipos de colección cuando WCF se está ejecutando en un entorno de confianza parcial, si ninguna de las implementaciones GetEnumerator()
es public, o ninguna de ellas es una implementación de interfaz explícita, se producirá una excepción de seguridad.
NetDataContractSerializer
NetDataContractSerializer no admite muchos tipos de colección de .NET Framework, como List, ArrayList, Dictionary y Hashtable, en un entorno de confianza parcial. Estos tipos tienen el atributo [Serializable]
establecido y, tal y como se explicó previamente en la sección acerca de la serialización, este atributo no se admite en confianza parcial. DataContractSerializer trata las colecciones de una manera especial y, por lo tanto, puede resolver esta restricción, pero NetDataContractSerializer no tiene ningún mecanismo para evitarla.
NetDataContractSerializer no admite el tipo DateTimeOffset en confianza parcial.
No se puede usar un suplente con NetDataContractSerializer (mediante el mecanismo SurrogateSelector) cuando se ejecuta con confianza parcial. Observe que esta restricción se aplica al uso de un suplente, no a su serialización.
Habilitación de comportamientos habituales que se van a ejecutar
Los comportamientos de servicio o de extremo que no están marcados con el atributo AllowPartiallyTrustedCallersAttribute (APTCA) y que se agregan a la sección <commonBehaviors> de un archivo de configuración no se ejecutan cuando la aplicación se ejecuta en un entorno de confianza parcial y no se inicia ninguna excepción cuando esto ocurre. Para forzar la ejecución de los comportamientos habituales, debe realizar una de las siguientes opciones:
Marcar el comportamiento habitual con el atributo AllowPartiallyTrustedCallersAttribute de modo que pueda ejecutarse cuando se implementa como una aplicación de confianza parcial. Tenga en cuenta que puede establecerse una entrada de registro en el equipo para evitar que se ejecuten los ensamblados marcados con APTCA. .
Asegurarse de implementar la aplicación como una aplicación de confianza total en la que los usuarios no pueden modificar los valores de la seguridad de acceso del código para ejecutar la aplicación en un entorno de confianza parcial. De poder hacerlo, el comportamiento no se ejecutaría y no se iniciaría ninguna excepción. Para asegurarse de esto, vea la opción levelfinal con la Code Access Security Policy Tool (Caspol.exe).
Para obtener un ejemplo de un comportamiento común, consulte Cómo bloquear extremos en la empresa.
Configuración
Con una sola excepción, el código de confianza parcial solo puede cargar secciones de configuración de WCF en el archivo app.config
local. Para cargar las secciones de configuración de WCF que hacen referencia a las secciones de WCF en machine.config o en un archivo web.config raíz requiere ConfigurationPermission (sin restricciones). Sin este permiso, las referencias a las secciones de configuración de WCF (comportamientos, enlaces) fuera del archivo de configuración local producen una excepción cuando se carga la configuración.
La única excepción es la configuración de tipos conocidos para la serialización, tal y como se describe en la sección relativa a la serialización de este tema.
Nota: |
---|
Las extensiones de configuración solo se admiten cuando se ejecutan bajo plena confianza. |
Diagnósticos
Registro de eventos
El registro de eventos limitado se admite bajo confianza parcial. En el registro de eventos solo se registran los errores de activación de servicio y los errores de registro de seguimiento/mensajes. El número máximo de eventos que se pueden registrar por proceso es 5, para evitar que se escriban demasiados mensajes en el registro de eventos.
Registro de mensajes
El registro de mensajes no funciona cuando WCF se ejecuta en un entorno de confianza parcial. Si está habilitado bajo confianza parcial, no produce un error en la activación del servicio, pero no se registra ningún mensaje.
Seguimiento
La funcionalidad de seguimiento restringido está disponible al ejecutarse en un entorno de confianza parcial. En el elemento <listeners> en el archivo de configuración, los únicos tipos que puede agregar son TextWriterTraceListener y los nuevos EventSchemaTraceListener. El uso del XmlWriterTraceListener estándar puede producir registros incompletos o incorrectos.
Los orígenes de seguimiento admitidos son:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors y System.IdentityModel.Tokens.
No se admiten los siguientes orígenes de seguimiento:
CardSpace
No se deben especificar los siguientes miembros de la enumeración TraceOptions:
Al utilizar el seguimiento en un entorno de confianza parcial, asegúrese de que la aplicación tiene los permisos necesarios para almacenar el resultado del agente de escucha de seguimiento. Por ejemplo, al utilizar TextWriterTraceListener para escribir el resultado de seguimiento en un archivo de texto, asegúrese de que la aplicación tiene el FileIOPermission necesario exigido para escribir correctamente en el archivo de seguimiento.
Nota: |
---|
Para evitar inundar los archivos de seguimiento con errores duplicados, WCF deshabilita el seguimiento del recurso o acción después del primer error de seguridad. Hay un seguimiento de excepción para cada acceso erróneo a recurso la primera vez que se realiza un intento de tener acceso al recurso o realizar la acción. |
Host de servicio de WCF
El host de servicio de WCF no admite la confianza parcial. Si desea usar un servicio de WCF con confianza parcial, no use la plantilla de proyecto de biblioteca de servicios de WCF en Visual Studio para crear el servicio. En su lugar, cree un nuevo sitio web en Visual Studio, eligiendo la plantilla de sitio web de servicio de WCF, que puede hospedar el servicio en un servidor web en el que se admita la confianza parcial de WCF.
Otras limitaciones
WCF generalmente se limita a las consideraciones de seguridad impuestas en él por la aplicación de hospedaje. Por ejemplo, si WCF se hospeda en una Aplicación Explorador de XAML (XBAP), está sujeto a las limitaciones de XBAP, como se describe en Seguridad de confianza parcial en Windows Presentation Foundation.
Las características adicionales siguientes no están habilitadas al ejecutar indigo2 en un entorno de confianza parcial:
Instrumental de administración de Windows (WMI)
El registro de eventos solo está parcialmente habilitado (consulte la explicación en la sección Diagnósticos).
Contadores de rendimiento
El uso de características WCF que no se admiten en un entorno de confianza parcial puede producir excepciones en tiempo de ejecución.
Características no enumeradas
La mejor manera de detectar que una parte de la información o acción no está disponible al ejecutarse en un entorno de confianza parcial es intentar tener acceso al recurso o realizar la acción dentro de un bloque try, y, a continuación, catch el error. Para evitar inundar los archivos de seguimiento con errores duplicados, WCF deshabilita el seguimiento del recurso o acción después del primer error de seguridad. Hay un seguimiento de excepción para cada acceso erróneo a recurso la primera vez que se realiza un intento de tener acceso al recurso o realizar la acción.
Vea también
Referencia
HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement
Conceptos
Escenarios de implementación admitidos
Procedimientos recomendados de confianza parcial