web-dev-qa-db-fra.com

Activer l'en-tête Access-Control-Allow-Credentials dans le site Web Azure (Azure App Services)

Nous avons récemment migré une application API d'Azure Cloud Services vers des sites Web Azure, et certains clients utilisent toujours notre protocole hérité pour l'authentification, qui utilise des cookies (au lieu de l'habituel Authorization: Bearer En-tête HTTP). Nous devons prendre en charge ce protocole d'authentification un peu plus longtemps car les clients ne pourront pas migrer immédiatement.

Pour prendre en charge les cookies dans une demande ajax cross-origine dirigée vers l'API, le client doit définir le paramètre withCredentials sur true dans XMLHttpRequest, et le serveur doit répondre avec le Access-Control-Allow-Credentials en-tête également à toute demande CORS.

Le problème auquel nous sommes confrontés est que le site Web Azure gère CORS tout seul et utilise sa propre configuration (qui est limitée à une liste des origines autorisées) pour la réponse, ce qui ne permet pas de définir cet en-tête ... brisant ainsi la application pour tous nos clients Ajax!

Existe-t-il un moyen d'ajouter (temporairement) cet en-tête dans les réponses?

12
Maxime Rossini

Nous avons finalement réussi à comprendre le comportement du middleware Azure Apps CORS. Pour le désactiver, vous devez effacer chaque entrée Origin autorisée dans le panneau CORS de votre application Web (y compris *). Ensuite, vous pouvez gérer CORS par vous-même, en utilisant la fonctionnalité Web Api 2 ou en utilisant le web.config.

Les informations sont même disponibles dans la documentation :

N'essayez pas d'utiliser à la fois Web API CORS et App Service CORS dans une seule application API. App Service CORS aura la priorité et Web API CORS n'aura aucun effet. Par exemple, si vous activez un domaine Origin dans App Service et activez tous les domaines Origin dans votre code d'API Web, votre application Azure API n'acceptera que les appels du domaine que vous avez spécifié dans Azure.

La réponse finale est donc la suivante: si votre application n'a pas besoin d'une gestion CORS très spécifique, vous pouvez utiliser Azure App Service CORS. Sinon, vous devrez le gérer vous-même et désactiver toute la configuration CORS dans l'application Web.

18
Maxime Rossini

C'est quelque chose que vous pouvez faire dans le fichier web.config disponible dans votre application Web.

Vous pouvez le modifier à l'aide de Visual Studio Online (Monaco), un outil que vous ajoutez à partir du portail Azure.

En savoir plus ici: http://enable-cors.org/server_iis7.html

1
Etienne Margraff

Ceci est désormais pris en charge dans la fonctionnalité Azure App Service CORS. Malheureusement, il n'y a pas encore d'UX pour cela, donc c'est un peu pénible à activer. Il existe actuellement deux méthodes simples.

  1. Sur le portail Azure, accédez à votre application Web. Accédez à API> CORS. Il y a maintenant une case à cocher pour Enable Access-Control-Allow-Credentials. Cochez cette case et appuyez sur Save.

  2. Utilisez l'Azure CLI avec la commande suivante:

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.cors.supportCredentials=true --api-version 2015-06-01

Vous pouvez voir plus de documentation ici .

REMARQUE: cela ne fonctionne pas avec * comme origine autorisée. C'est un choix de sécurité que nous avons décidé de faire.

1
Connor McMahon