Freigeben über


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:

  1. Starten Sie den Browser, und navigieren Sie zur Web-App.
  2. Drücken Sie F12-, um die Debugkonsole zu öffnen.
  3. 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.

CORS-Problem

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-.

lokale Anforderung mit demselben Ursprung

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.

Anwendungsproxy CORS-Anforderung

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/CORSWebClientfestgelegt ist, kann die App keine erfolgreichen Anforderungen an das contoso.com/CORSWebService Verzeichnis senden, da sie ursprungsübergreifend sind.

App einzeln 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:

Veröffentliche übergeordnetes Verzeichnis

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.

Hinzufügen eines benutzerdefinierten Antwortheaders im IIS-Manager-

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.

Siehe auch