Puede habilitar el soporte de uso compartido de recursos de origen cruzado (CORS) para la API. CORS permite a scripts incorporados en una página
llamar a la API entre límites de dominio.
Antes de empezar
Esta tarea está relacionada con la configuración de una definición de API OpenAPI 3.0. Para obtener detalles sobre cómo configurar una definición de API de OpenAPI 2.0 , consulte Edición de una definición de API de OpenAPI 2.0.
Acerca de esta tarea
Nota:
- El soporte de CORS sólo está disponible en DataPower® API Gateway.
- Cuando CORS está habilitado, la pasarela de API ejecuta la política de preflujo
cors para manejar todas las solicitudes CORS efectuadas a la API.
- Cuando CORS está habilitado y se recibe una solicitud de verificación, sólo se realizan las siguientes acciones de API:
- La política de preflujo
cors configura las cabeceras de respuesta adecuadas.
- Se establecen las cabeceras de respuesta.
- Cuando se recibe una solicitud de verificación, el indicador
request.attributes.isCORSPreflight se establece en true.
- Para todas las solicitudes de verificación, las políticas de preflujo
security y client-identification siempre se pasan por alto, independientemente de si CORS está habilitado.
Puede completar esta tarea utilizando la aplicación de interfaz de usuario de API Designer o utilizando la interfaz de usuario de API Manager basada en navegador.
En cualquier momento, puede conmutar directamente al origen YAML OpenAPI subyacente pulsando el icono Origen
. Para volver al formulario de diseño, pulse el icono Formulario
.
Procedimiento
Para habilitar el soporte de CORS para una API, siga estos pasos:
- Abra la API para editarla, tal como se describe en Edición de una definición de API de OpenAPI 3.0.
- Seleccione el separador Pasarela , expanda Valores de pasarela y portaly, a continuación, pulse CORS.
Se abre la página CORS .
- Seleccione Habilitar CORS.
- Opcional: Configure una política CORS.
¿Debe crear una política CORS? Revise las siguientes consideraciones:
- Una política CORS es una parte opcional de una definición de API. Si una definición de API no tiene ninguna política CORS pero CORS está habilitada, las solicitudes CORS se aceptarán de todos los orígenes.
Si desea aceptar solicitudes CORS de todos los orígenes, habilite CORS pero no añada una política CORS a la definición de API.
- Si crea una política CORS, las solicitudes CORS sólo se aceptarán de los orígenes que se listan explícitamente en las reglas CORS contenidas en la política CORS. Las solicitudes de CORS de cualquier otro origen se rechazarán.
Si desea aceptar solicitudes CORS de sólo un número limitado de orígenes (y es posible que también desee configurar las cabeceras de respuesta Access-Control-Allow-Credentials y Access-Control-Expose-Headers), debe habilitar CORS y crear una política CORS. Sólo se aceptarán los orígenes listados explícitamente en el campo permitir origen de las reglas CORS de la política CORS; se rechazarán las solicitudes CORS de cualquier origen no listado.
- Para configurar una nueva política de CORS, siga estos pasos:
- Junto a Política CORS, pulse Añadir.
- Para incluir la cabecera
Access-Control-Allow-Credentials: true en una respuesta, seleccione Permitir credenciales. La cabecera de respuesta Access-Control-Allow-Credentials indica a los navegadores si debe exponerse la respuesta al código JavaScript de componente frontal cuando la modalidad de credenciales de la solicitud (Request.credentials) está establecida en include.
- Para añadir uno o varios de los valores siguientes a la cabecera de respuesta
Access-Control-Expose-Headers , seleccione Exponer cabecerasy seleccione entre las opciones siguientes:
- Predefinido : el valor predefinido de la pasarela. Esta opción se selecciona de forma predeterminada.
- Programa de fondo : el valor de
Access-Control-Expose-Headers de la respuesta de programa de fondo.
- Personalizado : una serie personalizada.
- Pulse Crear.
- Junto a Orígenes permitidos , pulse Añadir.
- Especifique el URL de origen y pulse Crear. Este valor indica que la respuesta puede compartirse con el código de solicitud del origen especificado.
- Para modificar una política de CORS existente, pulse su entrada Orígenes permitidos en la página CORS. A continuación, puede modificar URLs de origen individuales, añadir orígenes adicionales y cambiar el valor Permitir credenciales.
- Ejemplo
- El ejemplo siguiente contiene tres reglas:
- Aceptar una cabecera Origin de
https://example.com y devolver Access-Control-Allow-Credentials: true en la respuesta de CORS.
- Aceptar una cabecera Origin de
http://domain.com. No se devolverá ninguna cabecera Access-Control-Allow-Credentials en la respuesta.
- Aceptar cualquiera de las siguientes cabeceras Origin:
http://example2.com
http://example3.com
http://example4.com
No se devolverá ninguna cabecera Access-Control-Allow-Credentials en la respuesta.
cors:
enabled: true
policy:
-
allow-origin:
- 'https://example.com'
allow-credentials: true
-
allow-origin:
- 'http://domain.com'
-
allow-origin:
- 'http://example2.com'
- 'http://example3.com'
- 'http://example4.com'
- Pulse Guardar para guardar los cambios.
- Opcional: Para implementar su propia solución CORS utilizando operaciones OPTIONS personalizadas, realice los pasos siguientes:
- Añada las cabeceras siguientes a las respuestas HTTP:
Access-Control-Allow-Origin: https://<portalhostname>
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Donde
<portalhostname> es su nombre de host
del Portal CMS.
- Opcional: Puede realizar un proxy de la API a través de API Connect como una API de invocación forzada para que CORS se maneje automáticamente.
Importante:
- Si implementa su propia solución CORS, debe inhabilitar la opción CORS descrita en el paso 3
- Las solicitudes de verificación de CORS se envían utilizando el método HTTP
OPTIONS. Por lo tanto, si necesita que la pasarela API Connect maneje estas solicitudes, debe habilitar el método OPTIONS para todas las API que manejarán las solicitudes previas; consulte Definición de vías de acceso para una API REST.
- Las solicitudes de
OPTIONS se contabilizan como llamadas de API con cualquier límite de velocidad configurado. Tenga en cuenta que puede aplicar límites de velocidad a operaciones individuales; consulte Definición de límites de velocidad para una operación de API.