Verstehen und Beheben von Problemen mit der ursprungsübergreifenden Ressourcenfreigabe (Cross-Origin Resource Sharing, CORS) im Microsoft Entra-Anwendungsproxy
Die ursprungsübergreifende Ressourcenfreigabe (Cross-Origin Resource Sharing, CORS) kann Herausforderungen für die Apps und APIs mit sich bringen, die Sie über Microsoft Entra-Anwendungsproxy veröffentlichen. In diesem Artikel werden CORS-Probleme für den Microsoft Entra-Anwendungsproxy sowie entsprechende Lösungen behandelt.
Tipp
„Asynchrones JavaScript und eXtensible Markup Language“ wird als (AJAX) bezeichnet. AJAX enthält ein Akronym innerhalb eines Akronyms, in dem eXtensible Markup Language (XML) das letzte X
in AJAX bildet. AJAX steht für „Asynchrones JavaScript und XML“ und XML steht für „eXtensible Markup Language“.
Die Browsersicherheit verhindert in der Regel, dass eine Webseite Anforderungen an eine andere Domäne richten kann. Diese Einschränkung wird als Richtlinie des gleichen Ursprungs bezeichnet und verhindert, dass eine schädliche Website sensible Daten von einer anderen Website liest. Manchmal sollen andere Websites jedoch unter Umständen Ihre Web-API aufrufen können. CORS ist ein W3C-Standard, der einem Server eine weniger strenge Anwendung der Richtlinie des gleichen Ursprungs ermöglicht und einige Anforderungen zwischen verschiedenen Ursprüngen zulässt, während andere abgelehnt werden.
Verstehen und Erkennen von CORS-Problemen
Zwei URLs haben den gleichen Ursprung, wenn sie über identische Schemas, Hosts und Ports verfügen (Request for Comment (RFC) 6454). Beispiel:
http://contoso.com/foo.html
http://contoso.com/bar.html
Diese URLs haben jeweils einen anderen Ursprung als die beiden vorstehenden:
http://contoso.net
- Andere Domänehttp://contoso.com:9000/foo.html
- Anderer Porthttps://contoso.com/foo.html
- Anderes Schemahttp://www.contoso.com/foo.html
- Andere Unterdomäne
Die Richtlinie des gleichen Ursprungs sorgt dafür, dass Apps ohne korrekte Zugriffssteuerungsheader nicht auf Ressourcen eines anderen Ursprungs zugreifen können. Sind die CORS-Header nicht vorhanden oder nicht korrekt, tritt bei ursprungsübergreifenden Anforderungen ein Fehler auf.
CORS-Probleme können mithilfe der Debugging-Tools des Browsers identifiziert werden:
- Starten Sie den Browser, und navigieren Sie zur Web-App.
- Drücken Sie F12, um die Debugging-Konsole zu öffnen.
- Versuchen Sie, die Transaktion zu reproduzieren, und überprüfen Sie die Konsolenmeldung. Ein CORS-Verstoß erzeugt einen ursprungsbezogenen Konsolenfehler.
Im folgenden Screenshot führte die Auswahl der Schaltfläche Ausprobieren zu einer CORS-Fehlermeldung, dass https://corswebclient-contoso.msappproxy.net
im Access-Control-Allow-Origin
-Header nicht gefunden wurde.
CORS-Herausforderungen im Zusammenhang mit dem Anwendungsproxy
Das folgende Beispiel zeigt ein typisches Szenario mit Microsoft Entra-Anwendungsproxy und CORS. Der interne Server hostet einen Web-API-Controller (CORSWebService) sowie einen CORS-Webclient (CORSWebClient), der CORSWebService aufruft. Es gibt eine Asynchrone JavaScript- und XML (AJAX)-Anforderung von CORSWebClient an CORSWebService.
Die CORSWebClient-App funktioniert, wenn sie lokal gehostet wird. Wird sie dagegen über den Microsoft Entra-Anwendungsproxy veröffentlicht, kann sie entweder nicht geladen werden, oder es tritt ein Fehler auf. Wenn Sie die Apps CORSWebClient und CORSWebService separat als unterschiedliche Apps über den Anwendungsproxy veröffentlicht haben, werden die beiden Apps in unterschiedlichen Domänen gehostet. Eine AJAX-Anforderung von CORSWebClient an CORSWebService ist eine ursprungsübergreifende Anforderung, und sie schlägt fehl.
Lösungen für CORS-Probleme mit dem Anwendungsproxy
Das oben genannte CORS-Problem lässt sich auf eine der folgenden Arten beheben:
Option 1: Einrichten einer benutzerdefinierten Domäne
Verwenden Sie eine benutzerdefinierte Domäne für den Microsoft Entra-Anwendungsproxy, um bei der Veröffentlichung den gleichen Ursprung zu verwenden, ohne Änderungen an App-Ursprüngen, Code oder Headern vornehmen zu müssen.
Option 2: Veröffentlichen des übergeordneten Verzeichnisses
Veröffentlichen Sie das übergeordnete Verzeichnis beider Apps. Diese Lösung funktioniert besonders gut, wenn sich auf dem Webserver nur zwei Apps befinden. Anstatt jede App separat zu veröffentlichen, können Sie das gemeinsame übergeordnete Verzeichnis veröffentlichen, um den gleichen Ursprung zu erhalten.
Die Beispiele zeigen die Seiten des Microsoft Entra-Anwendungsproxys für die CORSWebClient-App. Wenn die interne URL auf contoso.com/CORSWebClient
festgelegt ist, kann die App keine erfolgreichen Anforderungen an das contoso.com/CORSWebService
-Verzeichnis richten, da sie ursprungsübergreifend sind.
Legen Sie stattdessen die interne URL fest, um das übergeordnete Verzeichnis zu veröffentlichen, das sowohl die Verzeichnisse CORSWebClient
als auch CORSWebService
umfasst:
Die resultierenden App-URLs beheben das CORS-Problem:
https://corswebclient-contoso.msappproxy.net/CORSWebService
https://corswebclient-contoso.msappproxy.net/CORSWebClient
Option 3: Aktualisieren der HTTP-Header
Um der Ursprungsanforderung zu entsprechen, fügen Sie dem Webdienst einen benutzerdefinierten HTTP-Antwortheader hinzu. Websites, die in Internetinformationsdienste (Internet Information Services, IIS) ausgeführt werden, verwenden den IIS-Manager, um den Header zu ändern.
Die Änderung erfordert keine Codeänderungen. Sie können es in einer Fiddler-Ablaufverfolgung überprüfen.
**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
Option 4: Ändern der Anwendung
Sie können Ihre Anwendung ändern, um CORS zu unterstützen, indem Sie den Header „Access-Control-Allow-Origin“ mit entsprechenden Werten hinzufügen. Die Vorgehensweise zum Hinzufügen des Headers hängt von der Programmiersprache der Anwendung ab. Das Ändern des Codes erfordert den größten Aufwand.
Option 5: Verlängern der Lebensdauer des Zugriffstokens
Einige CORS-Probleme können nicht behoben werden. Ihre Anwendung leitet beispielsweise zur Authentifizierung an login.microsoftonline.com
weiter, und das Zugriffstoken läuft ab. In diesem Fall ist der CORS-Aufruf nicht erfolgreich. Zur Umgehung dieses Problemszenarios können Sie die Lebensdauer des Zugriffstokens verlängern, um zu verhindern, dass es während einer Benutzersitzung abläuft. Weitere Informationen finden Sie unter Konfigurierbare Tokenlebensdauer in Microsoft Entra ID.