Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El uso compartido de recursos entre orígenes (CORS) puede presentar desafíos para las aplicaciones y las API que publicas a través del proxy de aplicación de Microsoft Entra. En este artículo se describen los problemas y soluciones de CORS del proxy de aplicación de Microsoft Entra.
La seguridad del explorador normalmente impide que una página web realice solicitudes a otro dominio. Esta restricción se denomina directiva de mismo origen. La directiva impide que un sitio malintencionado lea datos confidenciales de otro sitio. Sin embargo, a veces es posible que quiera permitir que otros sitios llamen a la API web. CORS es un estándar W3C que indica a un servidor que permita algunas solicitudes entre diferentes orígenes y rechace otras.
Identificación de un problema de CORS
Dos direcciones URL tienen el mismo origen si tienen esquemas, hosts y puertos idénticos (Solicitud de comentarios (RFC) 6454), como en este ejemplo:
http://contoso.com/foo.htmlhttp://contoso.com/bar.html
Estas direcciones URL tienen orígenes diferentes a los dos anteriores:
-
http://contoso.net: dominio diferente -
http://contoso.com:9000/foo.html: puerto diferente -
https://contoso.com/foo.html: esquema diferente -
http://www.contoso.com/foo.html: subdominio diferente
La directiva de mismo origen impide que las aplicaciones accedan a recursos desde otros orígenes a menos que usen los encabezados de control de acceso correctos. Si los encabezados CORS no están presentes o son incorrectos, se producirá un error en las solicitudes entre orígenes.
Puede identificar los problemas de CORS mediante las herramientas de depuración del explorador:
- Abra el explorador y vaya a la aplicación web.
- Seleccione la tecla F12 para abrir la consola de depuración en DevTools.
- Intente reproducir la transacción y revise el mensaje de la consola. Una infracción de CORS genera un error de la consola acerca del origen.
En la siguiente captura de pantalla, al seleccionar el botón Probarlo hizo que apareciera el mensaje de error de CORS de que https://corswebclient-contoso.msappproxy.net no se encontró en el encabezado de Access-Control-Allow-Origin.
Desafíos de CORS con el proxy de aplicaciones
El siguiente ejemplo muestra un escenario típico de proxy de aplicación CORS de Microsoft Entra. El servidor interno hospeda un controlador de API web CORSWebService y un CORSWebClient que llama a CORSWebService. Se realiza una solicitud asincrónica de JavaScript y XML (AJAX) de CORSWebClient a CORSWebService.
La aplicación CORSWebClient funciona en el entorno local, pero produce un error o muestra un error cuando se publica a través del proxy de aplicación de Microsoft Entra. Si CORSWebClient y CORSWebService se publican como aplicaciones independientes, se hospedan en dominios diferentes. Los distintos dominios realizan solicitudes AJAX de CORSWebClient a CORSWebService entre orígenes, lo que hace que se produzca un error.
Soluciones para los problemas de CORS en el proxy de aplicación
Puede resolver el problema de CORS anterior de varias maneras.
Opción 1: Configurar un dominio personalizado
Use un proxy de aplicación de Microsoft Entra con dominio personalizado para publicar desde el mismo origen, sin realizar ningún cambio en los orígenes de la aplicación, el código o los encabezados.
Opción 2: Publicar el directorio primario
Publique el directorio primario de ambas aplicaciones. Esta solución funciona especialmente bien si solo tiene dos aplicaciones en el servidor web. En lugar de publicar cada aplicación por separado, puede publicar el directorio primario común, lo que da como resultado el mismo origen.
En los siguientes ejemplos se muestran las páginas de proxy de aplicaciones de Microsoft Entra para la aplicación CORSWebClient. Cuando la dirección URL interna se establece en contoso.com/CORSWebClient, la aplicación no puede realizar solicitudes exitosas al directorio contoso.com/CORSWebService, ya que son de origen cruzado.
En su lugar, establezca el valor de Dirección URL interna para publicar el directorio primario, que incluye los CORSWebClient directorios y CORSWebService :
Las direcciones URL de la aplicación resultantes resuelven eficazmente el problema de CORS:
https://corswebclient-contoso.msappproxy.net/CORSWebServicehttps://corswebclient-contoso.msappproxy.net/CORSWebClient
Opción 3: Actualizar encabezados HTTP
Para que coincida con la solicitud de origen, agregue un encabezado de respuesta HTTP personalizado en el servicio web. Los sitios web que se ejecutan en Internet Information Services (IIS) usan el Administrador de IIS para modificar el encabezado.
La modificación no requiere ningún cambio de código. Puede comprobarlo en un seguimiento de Fiddler.
**Post the Header Addition**\
HTTP/1.1 200 OK\
Cache-Control: no-cache\
Pragma: no-cache\
Content-Type: text/plain; charset=utf-8\
Expires: -1\
Vary: Accept-Encoding\
Server: Microsoft-IIS/8.5 Microsoft-HTTPAPI/2.0\
**Access-Control-Allow-Origin: https://corswebclient-contoso.msappproxy.net**\
X-AspNet-Version: 4.0.30319\
X-Powered-By: ASP.NET\
Content-Length: 17
Opción 4: Modificar la aplicación
Puede cambiar la aplicación para admitir CORS agregando el Access-Control-Allow-Origin encabezado , con los valores adecuados. La manera de agregar el encabezado depende del lenguaje de código de la aplicación. Cambiar el código requiere el máximo esfuerzo.
Opción 5: Extender la duración del token de acceso
Algunos problemas de CORS no se pueden resolver. Por ejemplo, la aplicación redirige a login.microsoftonline.com para autenticarse y el token de acceso expira. A continuación, se produce un error en la llamada CORS. Una solución alternativa para este escenario es ampliar la duración del token de acceso para evitar que expire durante la sesión de un usuario. Para más información, consulte Vigencias de tokens configurables en Microsoft Entra ID.
Opción 6: Aplicación compleja
Para las aplicaciones que contienen varias aplicaciones web individuales en las que se usan solicitudes preliminares (OPTIONS), puede publicar las aplicaciones mediante la funcionalidad de aplicación compleja. Para obtener más información, consulte Descripción de las aplicaciones complejas en el proxy de aplicación de Microsoft Entra.