Vous pouvez activer la prise en charge de CORS (cross-origin resource sharing, partage de ressources d'origine croisée) pour votre API. La fonction CORS permet aux scripts intégrés dans une page Web d'appeler l'API au-delà des limites du domaine.
Avant de commencer
Cette tâche concerne la configuration d'une définition d'API OpenAPI 2.0. Pour plus d'informations sur la configuration d'une définition d'API OpenAPI 3.0 , voir Edition d'une définition d'API OpenAPI 3.0.
A propos de cette tâche
Remarque :
- La prise en charge de CORS est disponible uniquement sur le DataPower® API Gateway.
- Lorsque CORS est activé, la passerelle d'API exécute la stratégie de préflux
cors pour gérer toutes les demandes CORS envoyées à l'API.
- Lorsque CORS est activé et qu'une demande avant action est reçue, seules les actions d'API suivantes sont effectuées :
- La stratégie de préflux
cors configure les en-têtes de réponse appropriés.
- Les en-têtes de réponse sont définis.
- Lorsqu'une demande avant action est reçue, l'indicateur
request.attributes.isCORSPreflight est défini sur true.
- Pour toutes les demandes avant action, les stratégies de préflux
security et client-identification sont toujours ignorées, que CORS soit activé ou non.
Vous pouvez effectuer cette tâche soit à l'aide de l'application d'interface utilisateur API Designer , soit à l'aide de l'interface utilisateur API Manager basée sur un navigateur.
A tout moment, vous pouvez passer directement à la source YAML OpenAPI sous-jacente en cliquant sur l'icône Source
. Pour revenir au formulaire de conception, cliquez sur l'icône Formulaire
.
Procédure
Pour activer la prise en charge de CORS pour une API, procédez comme suit :
- Ouvrez l'API pour édition, comme décrit dans Edition d'une définition d'API OpenAPI 2.0.
- Sélectionnez l'onglet Passerelle , développez Paramètres de passerelle et de portail, puis cliquez sur CORS.
La page CORS s'ouvre.
- Sélectionnez Enabled.
- Facultatif: Configurez une règle CORS.
Faut-il créer une règle CORS? Prenez connaissance des remarques suivantes :
- Une règle CORS est une partie facultative d'une définition d'API. Si une définition d'API n'a pas de règle CORS mais que CORS est activé, les demandes CORS sont acceptées à partir de toutes les origines.
Si vous souhaitez accepter les demandes CORS de toutes les origines, activez CORS mais n'ajoutez pas de règle CORS à la définition d'API.
- Si vous créez une règle CORS, les demandes CORS ne seront acceptées que depuis les origines qui sont explicitement répertoriées dans les règles CORS contenues dans la règle CORS. Les demandes CORS provenant d'autres origines seront rejetées.
Si vous souhaitez accepter les demandes CORS à partir d'un nombre limité d'origines (et si vous souhaitez également configurer les en-têtes de réponse Access-Control-Allow-Credentials et Access-Control-Expose-Headers), vous devez activer CORS et créer une règle CORS. Seules les origines explicitement répertoriées dans la zone allow-origin des règles CORS de la stratégie CORS seront acceptées ; les demandes CORS provenant de toutes les origines non répertoriées seront rejetées.
- Pour configurer une nouvelle stratégie CORS, procédez comme suit :
- En regard de Politique, cliquez sur Ajouter.
- Pour inclure l'en-tête
Access-Control-Allow-Credentials: true dans une réponse, Sélectionnez Autoriser les données d'identification. L'en-tête de réponse Access-Control-Allow-Credentials indique aux navigateurs s'ils doivent exposer la réponse au code JavaScript frontal lorsque le mode de données d'identification de la demande (Request.credentials) est défini sur include.
- Pour ajouter une ou plusieurs des valeurs suivantes à l'en-tête de réponse
Access-Control-Expose-Headers , sélectionnez Exposer les en-têteset sélectionnez l'une des options suivantes:
- Prédéfini -Valeur prédéfinie de la passerelle. Cette option est sélectionnée par défaut.
- Backend -Valeur de
Access-Control-Expose-Headers provenant de la réponse de back end.
- Personnalisé -Chaîne personnalisée.
- Cliquez sur Créer.
- En regard de Origines autorisées , cliquez sur Ajouter.
- Entrez l'URL d'origine, puis cliquez sur Créer. Ce paramètre indique que la réponse peut être partagée avec le code demandeur à partir de l'origine spécifiée.
- Pour modifier une règle CORS existante, cliquez sur son entrée dans la page CORS . Vous pouvez ensuite modifier des URL d'origines individuellement, ajouter d'autres origines et modifier le paramètre Autoriser les données d'identification.
- Exemple
- L'exemple suivant comporte trois règles :
- Accepter un en-tête Origin de
https://example.com et renvoyer
Access-Control-Allow-Credentials: true dans la réponse CORS.
- Accepter un en-tête Origin de
http://domain.com. Aucun en-tête Access-Control-Allow-Credentials ne sera renvoyé dans la réponse.
- Accepter l'un des en-têtes Origin suivants :
http://example2.com
http://example3.com
http://example4.com
Aucun en-tête Access-Control-Allow-Credentials ne sera renvoyé dans la réponse.
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'
- Cliquez sur Sauvegarder pour sauvegarder vos modifications.
- Facultatif: Pour implémenter votre propre solution CORS à l'aide d'opérations OPTIONS personnalisées, procédez comme suit:
- Ajoutez les en-têtes suivants à vos réponses HTTP :
Access-Control-Allow-Origin: https://<portalhostname>
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Où
<portalhostname> est le nom d'hôte de votre
portail CMS.
- Facultatif: Vous pouvez mettre en proxy votre API via API Connect en tant qu'API d'appel appliquée afin que CORS soit géré automatiquement.
Important :
- Si vous implémentez votre propre solution CORS, vous devez désactiver l'option CORS décrite à l'étape 3
- Les demandes avant activation CORS sont envoyées par le biais de la méthode HTTP
OPTIONS. Par conséquent, si vous avez besoin que ces demandes soient traitées par la passerelle API Connect , vous devez activer la méthode OPTIONS pour toutes les API qui gèrent les demandes en cours ; voir Définition de chemins pour une API REST.
- Les demandes
OPTIONS sont imputées sur la limite de débit configurée pour les appels API. Notez que vous pouvez appliquer des limites de débit à des opérations individuelles ; voir Définition de limites de débit pour une opération d'API.