Verstehen und Lösen von Microsoft Entra-Anwendungsproxy-Problemen bei der ressourcenübergreifenden Freigabe (CORS)
Cross-Origin Resource Sharing (CORS) kann Herausforderungen für die Apps und APIs darstellen, die Sie über den Microsoft Entra-Anwendungsproxy veröffentlichen. In diesem Artikel werden Probleme und Lösungen von Microsoft Entra-Anwendungsproxy-CORS erläutert.
Trinkgeld
Asynchrones JavaScript und eXtensible Markup Language wird als (AJAX) bezeichnet. AJAX enthält ein Akronym in einem Akronym, in dem eXtensible Markup Language (XML) die 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 stellt. Diese Einschränkung wird als Richtlinie mit demselben Ursprungbezeichnet und verhindert, dass eine böswillige Website vertrauliche Daten von einer anderen Website liest. Es kann jedoch vorkommen, dass andere Websites Ihre Web-API aufrufen dürfen. CORS ist ein W3C-Standard, mit dem ein Server die Richtlinie für denselben Ursprung entspannen und einige ursprungsübergreifende Anforderungen zulassen kann, während andere abgelehnt werden.
Verstehen und Identifizieren von CORS-Problemen
Zwei URLs weisen denselben Ursprung auf, wenn sie identische Schemas, Hosts und Ports haben (Request For Comments (RFC) 6454), z. B.:
http://contoso.com/foo.html
http://contoso.com/bar.html
Diese URLs haben unterschiedliche Ursprünge als die beiden vorherigen:
-
http://contoso.net
– Unterschiedliche Domäne -
http://contoso.com:9000/foo.html
- Unterschiedlicher Anschluss -
https://contoso.com/foo.html
- Verschiedenes Schema -
http://www.contoso.com/foo.html
- Verschiedene Unterdomäne
Die Richtlinie für den gleichen Ursprung verhindert, dass Apps von anderen Ursprüngen auf Ressourcen zugreifen, es sei denn, sie verwenden die richtigen Zugriffssteuerungsheader. Wenn die CORS-Header nicht vorhanden oder falsch sind, schlagen Ursprungsübergreifende Anforderungen fehl.
Sie können CORS-Probleme mithilfe von Browserdebugtools identifizieren:
- Starten Sie den Browser, und navigieren Sie zur Web-App.
- Drücken Sie F12-, um die Debugkonsole zu öffnen.
- Versuchen Sie, die Transaktion zu reproduzieren, und überprüfen Sie die Konsolenmeldung. Eine CORS-Verletzung erzeugt einen Konsolenfehler bzgl. des Ursprungs.
Im folgenden Screenshot hat die Auswahl der Schaltfläche "Testen" dazu geführt, dass eine CORS-Fehlermeldung angezeigt wurde, weil https://corswebclient-contoso.msappproxy.net
in der Kopfzeile Access-Control-Allow-Origin
nicht gefunden wurde.
Die CORS-Herausforderungen mit einem Anwendungs-Proxy
Das folgende Beispiel zeigt ein typisches CORS-Szenario eines Microsoft-Entra-Anwendungsproxys. Der interne Server hostet einen CORSWebService- Web-API-Controller und eine CORSWebClient-, die CORSWebService-aufruft. Es gibt eine asynchrone JavaScript- und XML-Anforderung (AJAX) von CORSWebClient zu CORSWebService-.
Die CORSWebClient-App funktioniert, wenn Sie sie lokal hosten, schlägt jedoch fehl oder es treten Fehler auf, wenn sie über den Microsoft Entra-Anwendungsproxy veröffentlicht wird. Wenn Sie die CORSWebClient- und CORSWebService- Apps separat als unterschiedliche Apps über den Anwendungsproxy veröffentlicht haben, werden die beiden Apps in verschiedenen Domänen gehostet. Eine AJAX-Anforderung von CORSWebClient zu CORSWebService- ist eine ursprungsübergreifende Anforderung und schlägt fehl.
Lösungen für Application-Proxy-CORS-Probleme
Sie können das vorherige CORS-Problem auf eine von mehreren Arten beheben.
Option 1: Einrichten einer benutzerdefinierten Domäne
Verwenden Sie einen benutzerdefinierten Domänennamen mit dem Microsoft Entra-Anwendungsproxy , um aus demselben Ursprung zu veröffentlichen, 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 eignet sich besonders gut, wenn Sie nur über zwei Apps auf dem Webserver verfügen. Anstatt jede App separat zu veröffentlichen, können Sie das gemeinsame übergeordnete Verzeichnis veröffentlichen, das zu demselben Ursprung führt.
Die Beispiele zeigen die Proxyseiten der Microsoft Entra-Anwendung für die CORSWebClient--App. Wenn die internen URL- auf contoso.com/CORSWebClient
festgelegt ist, kann die App keine erfolgreichen Anforderungen an das contoso.com/CORSWebService
Verzeichnis senden, da sie ursprungsübergreifend sind.
veröffentlichen
Legen Sie stattdessen die interne URL- fest, um das übergeordnete Verzeichnis zu veröffentlichen, das sowohl die verzeichnisse CORSWebClient
als auch CORSWebService
enthält:
Die resultierenden App-URLs lösen das CORS-Problem effektiv:
https://corswebclient-contoso.msappproxy.net/CORSWebService
https://corswebclient-contoso.msappproxy.net/CORSWebClient
Option 3: Aktualisieren von HTTP-Headern
Fügen Sie dem Webdienst einen benutzerdefinierten HTTP-Antwortheader hinzu, um die Ursprungsanforderung zu erfüllen. Websites, die in Internet Information Services (IIS) ausgeführt werden, verwenden den IIS-Manager, um den Header zu ändern.
Für die Änderung sind keine Codeänderungen erforderlich. 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 Access-Control-Allow-Origin-Header mit entsprechenden Werten hinzufügen. Die Möglichkeit zum Hinzufügen des Headers hängt von der Codesprache 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 wird beispielsweise zu login.microsoftonline.com
zur Authentifizierung umgeleitet, und das Zugriffstoken läuft ab. Der CORS-Aufruf schlägt dann fehl. Eine Problemumgehung für dieses Szenario besteht darin, die Lebensdauer des Zugriffstokens zu verlängern, um zu verhindern, dass es während der Sitzung eines Benutzers abläuft. Weitere Informationen finden Sie unter Konfigurierbare Tokenlebensdauern in Microsoft Entra ID.
Option 6: Komplexe Anwendung
Für Anwendungen, die aus mehreren einzelnen Webanwendungen bestehen, bei denen Preflight-Anforderungen (OPTIONS) verwendet werden, können Sie sie mithilfe des komplexen Anwendungsfeatures veröffentlichen. Weitere Informationen finden Sie unter Verständnis komplexer Anwendungen in Microsoft Entra-Anwendungsproxy.