2016-04-26 27 views
6

Abbiamo migrato di recente un'applicazione API da Servizi cloud di Azure ai siti Web di Azure e alcuni client continuano a utilizzare il nostro protocollo legacy per l'autenticazione, che utilizza i cookie (invece della solita intestazione HTTP Authorization: Bearer). Dobbiamo supportare questo protocollo di autenticazione un po 'più a lungo, poiché i client non saranno in grado di migrare immediatamente.Abilita intestazione Access-Control-Allow-Credentials nel sito Web di Azure (Servizi app di Azure)

Per sostenere i cookie in una richiesta Ajax cross-origine diretto alle API, il client deve impostare l'impostazione withCredentials al true nel XMLHttpRequest, e il server deve repond con la Access-Control-Allow-Credentials intestazione, nonché a qualsiasi richiesta CORS.

Il problema che dobbiamo affrontare è che il sito Web di Azure gestisce CORS da solo e utilizza la propria configurazione (che è limitata a un elenco di origini consentite) per la risposta, che non consente di impostare questa intestazione. rompendo così l'applicazione per tutti i nostri clienti Ajax!

C'è un modo per aggiungere (temporaneamente) questa intestazione nelle risposte?

risposta

11

Siamo finalmente riusciti a capire il comportamento del middleware Azure Apps CORS. Per disabilitarlo, è necessario cancellare ogni singola voce di origine consentita nel pannello CORS della propria app Web (incluso *). Quindi puoi gestire CORS da solo, utilizzando la funzionalità Web Api 2 o utilizzando web.config.

le informazioni sono anche disponibili in the documentation:

Non cercare di utilizzare entrambe le CORS API web e App Servizio CORS in un'unica applicazione API. Servizio app CORS avrà la precedenza e Web CORS API non avrà alcun effetto. Ad esempio, se si abilita un dominio di origine nel servizio app e si abilitano tutti i domini di origine nel codice API Web, l'app API di Azure accetta solo chiamate dal dominio specificato in Azure.

Quindi la risposta finale è: Se l'applicazione non richiede una gestione CORS molto specifica, è possibile utilizzare CORS del servizio app di Azure. Altrimenti dovrai gestirlo tu stesso e disabilitare la configurazione di CORS nell'app web.

+0

Grazie! Ho avuto un sacco di problemi nell'utilizzare CORS in un'app per servicestacks ospitata su Azure. Risulta che rimuovere la configurazione CORS dal portale di Azure ha risolto tutto. –

+0

Strano, dovrebbe avere un interruttore per disabilitare Azure cors, semplicemente rimuovendo tutti i siti lo disabilita e passa alla tua app. Se sono elencate delle origini, sembra che rimuova qualsiasi altra intestazione CORS che hai (con metodi, metodi, ecc.).Penso che una sorta di spiegazione che l'accesso a un sito possa abilitarlo e quali valori userebbe per quelle altre intestazioni dovrebbero essere fornite. Penso che dovrebbe dare qualche tipo di errore o avviso per rimuovere automaticamente anche le intestazioni ... –

1

Questo è qualcosa che è possibile eseguire nel file web.config disponibile nella propria app Web.

È possibile modificarlo utilizzando Visual Studio Online (Monaco) che è un Strumenti che si aggiunge dal portale di Azure.

Read more here: http://enable-cors.org/server_iis7.html

+0

Ero scettico su questo metodo perché pensavo che il middleware CORS di Azure Website sovrascrisse tutte le intestazioni CORS impostate dall'applicazione ospitata per impostarne le proprie, ma proverò comunque e ti farò sapere. –

+0

Questo è quello che pensavo, c'è un middleware del sito Web di Azure tra il client e il nostro server delle applicazioni che elimina tutte le intestazioni correlate a CORS impostate dal server e le sostituisce con le proprie, quindi aggiungendo un personalizzato 'Access-Control-Allow- L'intestazione delle credenziali nel file web.config non ha alcun effetto. Qualsiasi altra intestazione personalizzata viene aggiunta correttamente, ma le intestazioni CORS non lo sono. –