Proteger WCF Data ServicesSecuring WCF Data Services

En este tema se describen consideraciones de seguridad específicas del desarrollo. de la implementación y la ejecución de Servicios de datos de WCFWCF Data Services y de aplicaciones que acceden a servicios compatibles con Open Data Protocol (OData)Open Data Protocol (OData).This topic describes security considerations that are specific to developing, deploying, and running Servicios de datos de WCFWCF Data Services and applications that access services that support the Open Data Protocol (OData)Open Data Protocol (OData). También debe seguir las recomendaciones para crear aplicaciones de .NET Framework.NET Framework seguras.You should also follow recommendations for creating secure .NET Framework.NET Framework applications.

Cuando planee cómo proteger un servicio de Servicios de datos de WCFWCF Data Services basado en ODataOData, debe tratar tanto la autenticación, el proceso para detectar y comprobar la identidad de una entidad de seguridad, como la autorización, el proceso para determinar si una entidad de seguridad autenticada puede acceder a los recursos solicitados.When planning how to secure a Servicios de datos de WCFWCF Data Services-based ODataOData service, you must address both authentication, the process of discovering and verifying the identity of a principal, and authorization, the process of determining whether an authenticated principal is allowed to access the requested resources. También debe plantearse si va a cifrar el mensaje mediante SSL.You should also consider whether to encrypt the message by using SSL.

Autenticar las solicitudes de clientesAuthenticating Client Requests

Servicios de datos de WCFWCF Data Services no implementa ningún tipo de autenticación proprio, sino que confía en las medidas de autenticación del host de servicio de datos. does not implement any kind of authentication of its own, but rather relies on the authentication provisions of the data service host. Es decir, el servicio asume que cualquier solicitud recibida ya la ha autenticado el host de red y que este ha identificado correctamente la entidad de seguridad para la solicitud adecuadamente a través de las interfaces proporcionadas por Servicios de datos de WCFWCF Data Services.This means that the service assumes that any request that it receives has already been authenticated by the network host and that the host has correctly identified the principle for the request appropriately via the interfaces provided by Servicios de datos de WCFWCF Data Services. Estas opciones de autenticación y enfoques se describen en OData y autenticación.These authentication options and approaches are detailed in OData and Authentication series.

Opciones de autenticación para un servicio de datos de WCFAuthentication Options for a WCF Data Service

En la siguiente tabla se enumeran algunos de los mecanismos de autenticación disponibles para ayudar al usuario a autenticar solicitudes en el servicio de datos de WCF.The following table lists some of the authentication mechanisms that are available to help you authenticate requests to a WCF Data Service.

Opciones de autenticaciónAuthentication Options DescripciónDescription
Autenticación anónimaAnonymous authentication Cuando está habilitada la autenticación HTTP anónima, cualquier entidad de seguridad puede conectarse al servicio de datos.When HTTP anonymous authentication is enabled, any principle is able to connect to the data service. No se necesitan credenciales para el acceso anónimo.Credentials are not required for anonymous access. Use esta opción solo cuando desee permitir a alguien el acceso al servicio de datos.Use this option only when you want to allow anyone to access the data service.
Autenticación básica e implícitaBasic and digest authentication Se necesitan credenciales formadas por un nombre de usuario y una contraseña para la autenticación.Credentials consisting of a user name and password are required for authentication. Admite autenticación de clientes que no sean de Windows.Supports authentication of non-Windows clients. Nota de seguridad: las credenciales de autenticación básica (nombre de usuario y contraseña) se envían sin cifrar y se pueden interceptar.Security Note: Basic authentication credentials (user name and password) are sent in the clear and can be intercepted. La autenticación implícita envía un hash basado en las credenciales proporcionadas. De esta forma, la protección es mayor que la de la autenticación básica.Digest authentication sends a hash based-on the supplied credentials, which makes it more secure than basic authentication. Ambas son susceptibles de sufrir ataques de tipo " Man in the middle".Both are susceptible to man-in-the-middle attacks. Cuando se usan estos métodos de autenticación, debe plantearse la comunicación cifrada entre el cliente y el servicio de datos mediante el uso de la Capa de sockets seguros (SSL).When using these authentication methods, you should consider encrypting communication between client and the data service by using the Secure Sockets Layer (SSL).

Microsoft Internet Information Services (IIS) proporciona una implementación de la autenticación tanto básica como implícita para solicitudes HTTP en una aplicación ASP.NETASP.NET.Microsoft Internet Information Services (IIS) provides an implementation of both basic and digest authentication for HTTP requests in an ASP.NETASP.NET application. Esta implementación del proveedor de autenticación de Windows permite que una aplicación cliente de .NET Framework proporcione credenciales en el encabezado HTTP de la solicitud al servicio de datos para negociar sin ningún problema la autenticación de un usuario de Windows.This Windows Authentication Provider implementation enables a .NET Framework client application to supply credentials in the HTTP header of the request to the data service to seamlessly negotiate authentication of a Windows user. Para obtener más información, consulte referencia técnica de autenticación implícita.For more information, see Digest Authentication Technical Reference.

Cuando desee que el servicio de datos use la autenticación básica basada en algún servicio de autenticación personalizado y no en las credenciales de Windows, debe implementar un módulo HTTP de ASP.NETASP.NET personalizado para autenticación.When you want to have your data service use basic authentication based on some custom authentication service and not Windows credentials, you must implement a custom ASP.NETASP.NET HTTP Module for authentication.

Para obtener un ejemplo de cómo usar un esquema de autenticación básica personalizada con Servicios de datos de WCFWCF Data Services, vea la entrada en autenticación básica personalizada en el ODataOData y autenticación.For an example of how to use a custom basic authentication scheme with Servicios de datos de WCFWCF Data Services, see the post on Custom Basic Authentication in the ODataOData and authentication series.
Autenticación de WindowsWindows authentication Las credenciales basadas en Windows se intercambian mediante el uso de NTLM o Kerberos.Windows-based credentials are exchanged by using NTLM or Kerberos. Este mecanismo es más seguro que la autenticación básica o implícita, pero requiere que el cliente sea una aplicación basada en Windows.This mechanism is more secure than basic or digest authentication, but it requires that the client be a Windows-based application. IIS también proporciona una implementación de autenticación de Windows para solicitudes HTTP en una aplicación de ASP.NETASP.NET.IIS also provides an implementation of Windows authentication for HTTP requests in an ASP.NETASP.NET application. Para obtener más información, consulte información general sobre la autenticación de formularios ASP.NET.For more information, see ASP.NET Forms Authentication Overview.

Para obtener un ejemplo de cómo usar la autenticación de Windows con Servicios de datos de WCFWCF Data Services, vea la entrada en Windows autenticación en el ODataOData y autenticación.For an example of how to use Windows authentication with Servicios de datos de WCFWCF Data Services, see the post on Windows Authentication in the ODataOData and authentication series.
Autenticación de formularios de ASP.NETASP.NETASP.NETASP.NET forms authentication La autenticación de formularios permite autenticar a los usuarios mediante su propio código y, a continuación, conservar un token de autenticación en una cookie o en la dirección URL de la página.Forms authentication lets you authenticate users by using your own code and then maintain an authentication token in a cookie or in the page URL. Autentique el nombre de usuario y la contraseña de los usuarios que usen un formulario de inicio de sesión que cree.You authenticate the user name and password of your users using a login form that you create. Las solicitudes no autenticadas se redirigen a una página de inicio de sesión, en la que el usuario proporciona las credenciales y envía el formulario.Unauthenticated requests are redirected to a login page, where the user provides credentials and submits the form. Si la aplicación autentica la solicitud, el sistema emite un vale que contiene una clave con el fin de restablecer la identidad para posteriores solicitudes.If the application authenticates the request, the system issues a ticket that contains a key for reestablishing the identity for subsequent requests. Para obtener más información, consulte proveedor de autenticación de formularios.For more information, see Forms Authentication Provider. Nota de seguridad: de forma predeterminada, la cookie que contiene el vale de autenticación de formularios no está protegida cuando se usa la autenticación de formularios en un ASP.NETASP.NET aplicación Web.Security Note: By default, the cookie that contains the forms authentication ticket is not secured when you use forms authentication in a ASP.NETASP.NET Web application. Debe plantearse exigir SSL para proteger tanto el vale de autenticación como las credenciales de inicio de sesión iniciales.You should consider requiring SSL to protect both the authentication ticket and the initial login credentials.

Para un ejemplo de cómo utilizar autenticación de formularios con Servicios de datos de WCFWCF Data Services, vea la entrada en autenticación mediante formularios en el ODataOData y autenticación.For an example of how to use forms authentication with Servicios de datos de WCFWCF Data Services, see the post on Forms Authentication in the ODataOData and authentication series.
Autenticación basada en notificacionesClaims-based authentication En la autenticación basada en notificaciones, el servicio de datos se basa en un servicio de proveedor de identidades de confianza "terceros" para autenticar al usuario.In claims-based authentication, the data service relies on a trusted "third-party" identity provider service to authenticate the user. El proveedor de identidad autentica positivamente al usuario que solicita acceso a los recursos del servicio de datos y emite un token que concede acceso a los recursos solicitados.The identity provider positively authenticates the user that is requesting access to data service resources and issues a token that grants access to the requested resources. A continuación, este token se presenta en el servicio de datos, que concede acceso al usuario basándose en la relación de confianza con el servicio de identidad que emitió el token de acceso.This token is then presented to the data service, which then grants access to the user based on the trust relationship with the identity service that issued the access token.

La ventaja de usar un proveedor de autenticación basado en notificaciones es que se pueden usar para autenticar distintos tipos de clientes en dominios de confianza.The benefit of using a claims-based authentication provider is that they can be used to authenticate various types of clients across trust domains. Si se usan tales proveedores de terceros, un servicio de datos puede descargar los requisitos de mantenimiento y autenticación de usuarios.By employing such a third-party provider, a data service can offload the requirements of maintaining and authenticating users. OAuth 2.0 es un protocolo de autenticación basado en notificaciones compatible con el Control de acceso de AppFabric de Microsoft Azure para autorización federada como servicio.OAuth 2.0 is a claims-based authentication protocol that is supported by Windows Azure AppFabric Access Control for federated authorization as a service. Este protocolo admite servicios basados en REST.This protocol supports REST-based services. Para obtener un ejemplo de cómo usar OAuth 2.0 con Servicios de datos de WCFWCF Data Services, vea la entrada en OData y OAuth en el ODataOData y autenticación.For an example of how to use OAuth 2.0 with Servicios de datos de WCFWCF Data Services, see the post on OData and OAuth in the ODataOData and authentication series.

Autenticación de la biblioteca clienteAuthentication in the Client Library

De forma predeterminada, la biblioteca de cliente de Servicios de datos de WCFWCF Data Services no proporciona credenciales cuando se realiza una solicitud a un servicio de ODataOData.By default, the Servicios de datos de WCFWCF Data Services client library does not supply credentials when making a request to an ODataOData service. Cuando el servicio de datos necesita credenciales de inicio de sesión para autenticar a un usuario, estas credenciales se puedan proporcionar en una clase NetworkCredential a la que se accede desde la propiedad Credentials de la clase DataServiceContext, como en el ejemplo siguiente:When login credentials are required by the data service to authenticate a user, these credentials can be supplied in a NetworkCredential accessed from the Credentials property of the DataServiceContext, as in the following example:

// Set the client authentication credentials.  
context.Credentials =  
    new NetworkCredential(userName, password, domain);  
' Set the client authentication credentials.  
context.Credentials = _  
    New NetworkCredential(userName, password, domain)  

Para obtener más información, consulte Cómo: especificar las credenciales del cliente para una solicitud de servicio de datos.For more information, see How to: Specify Client Credentials for a Data Service Request.

Cuando el servicio de datos necesite credenciales de inicio de sesión que no se puedan especificar mediante el uso de un objeto NetworkCredential, como un token basado en notificaciones o una cookie, debe establecer manualmente los encabezados en la solicitud HTTP, que suelen ser los encabezados Authorization y Cookie.When the data service requires login credentials that cannot be specified by using a NetworkCredential object, such as a claims-based token or cookie, you must manually set headers in the HTTP request, usually the Authorization and Cookie headers. Para obtener más información sobre este tipo de escenario de autenticación, vea la entrada OData y autenticación: enlaces del lado cliente.For more information about this kind of authentication scenario, see the post OData and Authentication: Client-Side Hooks. Para obtener un ejemplo de cómo establecer los encabezados HTTP en un mensaje de solicitud, consulte Cómo: establecer encabezados en la solicitud de cliente.For an example of how to set HTTP headers in a request message, see How to: Set Headers in the Client Request.

SuplantaciónImpersonation

Por lo general, el servicio de datos accede a los recursos necesarios, como los archivos del servidor o de la base de datos, mediante el uso de las credenciales del proceso de trabajo que hospeda el servicio de datos.Generally, the data service accesses required resources, such as files on the server or a database, by using the credentials of the worker process that is hosting the data service. Al usar la suplantación, las aplicaciones ASP.NETASP.NET se pueden ejecutar con la identidad de Windows (cuenta de usuario) del usuario que realiza la solicitud.When using impersonation, ASP.NETASP.NET applications can execute with the Windows identity (user account) of the user making the request. La suplantación se suele usar en aplicaciones que confían en IIS para autenticar al usuario y las credenciales de esta entidad de seguridad se usan para obtener acceso a los recursos necesarios.Impersonation is commonly used in applications that rely on IIS to authenticate the user, and the credentials of this principle are used to access the required resources. Para obtener más información, consulte suplantación de ASP.NET.For more information, see ASP.NET Impersonation.

Configurar la autorización del servicio de datosConfiguring Data Service Authorization

La autorización es la concesión de acceso a los recursos de la aplicación a una entidad de seguridad o a un proceso que se identifique basándose en una autenticación correcta previa.Authorization is the granting of access to application resources to a principle or process that is identified based on a previously successful authentication. Como regla general, solo debe conceder los derechos estrictamente necesarios a los usuarios del servicio de datos para realizar las operaciones que necesiten las aplicaciones cliente.As a general practice, you should only grant sufficient rights to users of the data service to perform the operations required by client applications.

Restringir el acceso a los recursos del servicio de datosRestrict Access to Data Service Resources

De forma predeterminada, Servicios de datos de WCFWCF Data Services permite conceder acceso común de lectura y escritura a los recursos del servicio de datos (conjunto de entidades y operaciones de servicio) a cualquier usuario que pueda acceder al servicio de datos.By default, Servicios de datos de WCFWCF Data Services enables you to grant common read and write access against data service resources (entity set and service operations) to any user that is able to access the data service. Las reglas que definen el acceso de lectura y escritura se pueden definir por separado para cada conjunto de entidades expuesto por el servicio de datos, así como a las operaciones de servicio.Rules that define read and write access can be defined separately for each entity set exposed by the data service, as well as to any service operations. Se recomienda limitar el acceso tanto de lectura como de escritura a solo los recursos que necesite la aplicación cliente.We recommend limiting both read and write access to only the resources required by the client application. Para obtener más información, consulte requisitos mínimos de acceso a recursos.For more information, see Minimum Resource Access Requirements.

Implementar interceptores basados en rolesImplement Role-Based Interceptors

Los interceptores permiten interceptar solicitudes en los recursos del servicio de datos antes de que actúe en ellos dicho servicio.Interceptors enable you to intercept requests against data service resources before they are acted on by the data service. Para obtener más información, consulte interceptores.For more information, see Interceptors. Los interceptores le permiten tomar decisiones de autorización basadas el usuario autenticado que está realizando la solicitud.Interceptors enable you to make authorization decisions based the authenticated user that is making the request. Para obtener un ejemplo de cómo restringir el acceso a los recursos de servicio de datos en función de una identidad de usuario autenticado, vea Cómo: interceptar mensajes de servicio de datos.For an example of how to restrict access to data service resources based on an authenticated user identity, see How to: Intercept Data Service Messages.

Restringir el acceso al almacén de datos persistentes y a los recursos localesRestrict Access to the Persisted Data Store and Local Resources

A las cuentas que se usan para acceder al almacén persistente se les deben conceder solo los derechos estrictamente necesarios en una base de datos o en el sistema de archivos para admitir los requisitos del servicio de datos.The accounts that are used to access the persisted store should be granted only enough rights in a database or the file system to support the requirements of the data service. Cuando se usa la autenticación anónima, se trata de la cuenta usada para ejecutar la aplicación de hospedaje.When anonymous authentication is used, this is the account used to run the hosting application. Para obtener más información, consulta Cómo: Desarrollar un servicio de datos WCF que se ejecuta en IIS.For more information, see How to: Develop a WCF Data Service Running on IIS. Cuando se usa la suplantación, a los usuarios autenticados se les debe conceder acceso a estos recursos, normalmente como parte de un grupo de Windows.When impersonation is used, authenticated users must be granted access to these resources, usually as part of a Windows group.

Otras consideraciones de seguridadOther Security Considerations

Proteger los datos de la cargaSecure the Data in the Payload

ODataOData se basa en el protocolo HTTP. is based on the HTTP protocol. En un mensaje HTTP, el encabezado puede contener valiosas credenciales de usuario, en función de la autenticación implementada por el servicio de datos.In an HTTP message, the header may contain valuable user credentials, depending on the authentication implemented by the data service. El cuerpo del mensaje también puede contener datos valiosos de clientes que se deben proteger.The message body may also contain valuable customer data that must be protected. En ambos casos, se recomienda que use SSL para proteger esta información a través de la conexión.In both of these cases, we recommend that you use SSL to protect this information over the wire.

Cookies y encabezados del mensaje ignoradosIgnored Message Headers and Cookies

Los encabezados de solicitudes HTTP, que no sean los que declaran los tipos de contenido y las ubicaciones de los recursos, se ignoran y nunca los establece el servicio de datos.HTTP request headers, other than those that declare content types and resource locations, are ignored and are never set by the data service.

Las cookies se pueden usar como parte de un esquema de autenticación, por ejemplo, con la autenticación de los formularios de ASP.NETASP.NET.Cookies can be used as part of an authentication scheme, such as with ASP.NETASP.NET Forms Authentication. Servicios de datos de WCFWCF Data Services ignora, sin embargo, las cookies HTTP establecidas en una solicitud entrante.However, any HTTP cookies set on an incoming request are ignored by Servicios de datos de WCFWCF Data Services. El host de un servicio de datos puede procesar la cookie, pero el tiempo de ejecución de Servicios de datos de WCFWCF Data Services nunca analiza ni devuelve cookies.The host of a data service may process the cookie, but the Servicios de datos de WCFWCF Data Services runtime never analyzes or returns cookies. La biblioteca cliente de Servicios de datos de WCFWCF Data Services tampoco procesa las cookies enviadas en la respuesta.The Servicios de datos de WCFWCF Data Services client library also does not process cookies sent in the response.

Requisitos personalizados de hospedajeCustom Hosting Requirements

De forma predeterminada, Servicios de datos de WCFWCF Data Services se crea como aplicación de ASP.NETASP.NET hospedada en IIS.By default, Servicios de datos de WCFWCF Data Services is created as an ASP.NETASP.NET application hosted in IIS. De esta forma, el servicio de datos puede sacar provecho de los comportamientos seguros de esta plataforma.This enables the data service to leverage the secure behaviors of this platform. Puede definir los Servicios de datos de WCFWCF Data Services hospedados por un host personalizado.You can define Servicios de datos de WCFWCF Data Services that are hosted by a custom host. Para obtener más información, consulte hospeda el servicio de datos.For more information, see Hosting the Data Service. Los componentes y la plataforma que hospedan un servicio de datos deben asegurar los siguientes comportamientos de seguridad para impedir ataques contra el servicio de datos:The components and platform hosting a data service must ensure the following security behaviors to prevent attacks on the data service:

  • Limitar la longitud del URI aceptada en una solicitud del servicio de datos para todas las operaciones posibles.Limit the length of the URI accepted in a data service request for all possible operations.

  • Limitar el tamaño de los mensajes HTTP tanto entrantes como salientes.Limit the size of both incoming and outgoing HTTP messages.

  • Limitar el número total de solicitudes pendientes en cualquier momento dado.Limit the total number of outstanding requests at any given time.

  • Limitar la longitud de los encabezados HTTP y sus valores, así como proporcionar acceso a Servicios de datos de WCFWCF Data Services a los datos del encabezado.Limit the size of HTTP headers and their values, and provide Servicios de datos de WCFWCF Data Services access to header data.

  • Detectar y contraatacar los ataques conocidos, como ataques SYN de TCP y de reproducción de mensajes.Detect and counter known attacks, such as TCP SYN and message replay attacks.

Los valores ya no se codificanValues Are Not Further Encoded

Los valores de propiedad enviados al servicio de datos ya no los codifica el tiempo de ejecución de Servicios de datos de WCFWCF Data Services.Property values sent to the data service are not further encoded by the Servicios de datos de WCFWCF Data Services runtime. Por ejemplo, cuando una propiedad de cadena de una entidad contiene contenido HTML con formato, el servicio de datos no codifica las etiquetas en HTML.For example, when a string property of an entity contains formatted HTML content, the tags are not HTML encoded by the data service. Además, el servicio de datos ya no codifica los valores de propiedad de la respuesta.The data service also does not further encode property values in the response. Asimismo, la biblioteca cliente ya no efectúa ningún tipo de codificación adicional.The client library also does not perform any additional encoding.

Consideraciones sobre aplicaciones clienteConsiderations for Client Applications

Las consideraciones de seguridad siguientes se aplican a las aplicaciones que usan el cliente de Servicios de datos de WCFWCF Data Services para acceder a los servicios de ODataOData:The following security considerations apply to applications that use the Servicios de datos de WCFWCF Data Services client to access ODataOData services:

  • La biblioteca cliente asume que los protocolos usados para acceder al servicio de datos proporcionan un nivel de seguridad adecuado.The client library assumes that the protocols used to access the data service provide an appropriate level of security.

  • La biblioteca cliente usa todos los valores predeterminados para las opciones de tiempos de espera y de análisis de las pilas de transporte proporcionadas por la plataforma subyacente.The client library uses all the default values for timeouts and parsing options of the underlying platform-provided transport stacks.

  • La biblioteca cliente no lee la configuración a partir de los archivos de configuración de la aplicación.The client library does not read any settings from application configuration files.

  • La biblioteca cliente no implementa los mecanismos de acceso entre dominios.The client library does not implement any cross domain access mechanisms. En su lugar, confía en los mecanismos proporcionados por la pila HTTP subyacente.Instead, it relies on the mechanisms provided by the underlying HTTP stack.

  • La biblioteca cliente no dispone de elementos de interfaz de usuario y nunca intenta mostrar o presentar los datos que recibe o envía.The client library has no user interface elements, and it never tries to display or render the data that it receives or sends.

  • Se recomienda que las aplicaciones cliente siempre validen la entrada del usuario, así como los datos aceptados de servicios que no sean de confianza.We recommend that client applications always validate user input as well as data accepted from untrusted services.

Vea tambiénSee Also

Definir Servicios de datos de WCFDefining WCF Data Services
Biblioteca cliente de Servicios de datos de WCFWCF Data Services Client Library