CORS
VAN TOEPASSING OP: Alle API Management-lagen
Het cors
beleid voegt CORS-ondersteuning (Cross-Origin Resource Sharing) toe aan een bewerking of API om aanroepen tussen domeinen van browserclients toe te staan.
Notitie
Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Om u te helpen dit beleid te configureren, biedt de portal een begeleide editor op basis van formulieren. Meer informatie over het instellen of bewerken van API Management-beleid.
Beleidsinstructie
<cors allow-credentials="false | true" terminate-unmatched-request="true | false">
<allowed-origins>
<origin>origin uri</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="number of seconds">
<method>HTTP verb</method>
</allowed-methods>
<allowed-headers>
<header>header name</header>
</allowed-headers>
<expose-headers>
<header>header name</header>
</expose-headers>
</cors>
Kenmerken
Meetcriterium | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
allow-credentials | De Access-Control-Allow-Credentials header in het voorbereidende antwoord wordt ingesteld op de waarde van dit kenmerk en heeft invloed op de mogelijkheid van de client om referenties in aanvragen tussen domeinen in te dienen. Beleidsexpressies zijn toegestaan. |
Nee | false |
beëindiging van niet-overeenkomende aanvraag | Hiermee bepaalt u de verwerking van cross-origin-aanvragen die niet overeenkomen met de beleidsinstellingen. Beleidsexpressies zijn toegestaan. Wanneer OPTIONS de aanvraag wordt verwerkt als een voorbereidende aanvraag en Origin de header niet overeenkomt met beleidsinstellingen:- Als het kenmerk is ingesteld op true , beëindigt u de aanvraag onmiddellijk met een leeg 200 OK antwoord- Als het kenmerk is ingesteld op false , controleert u inkomend op andere beleidsregels binnen het bereik cors die directe onderliggende elementen van het binnenkomende element zijn en past u deze toe. Als er geen cors beleid wordt gevonden, beëindigt u de aanvraag met een leeg 200 OK antwoord. Wanneer GET of HEAD aanvraag de Origin header bevat (en daarom wordt verwerkt als een eenvoudige cross-origin-aanvraag), en komt deze niet overeen met beleidsinstellingen:- Als het kenmerk is ingesteld op true , beëindigt u de aanvraag onmiddellijk met een leeg 200 OK antwoord.- Als het kenmerk is ingesteld false op, staat u toe dat de aanvraag normaal doorgaat en voegt u geen CORS-headers toe aan het antwoord. |
Nee | true |
Elementen
Name | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
toegestane oorsprongen | Bevat origin elementen die de toegestane oorsprongen beschrijven voor aanvragen tussen domeinen. allowed-origins kan één origin element bevatten dat aangeeft * dat een oorsprong is toegestaan, of een of meer origin elementen die een URI bevatten. |
Ja | N.v.t. |
toegestane methoden | Dit element is vereist als andere methoden dan GET of POST zijn toegestaan. Bevat method elementen die de ondersteunde HTTP-woorden opgeven. De waarde * geeft alle methoden aan. |
Nee | Als deze sectie niet aanwezig GET is en POST wordt ondersteund. |
toegestane headers | Dit element bevat header elementen die namen opgeven van de headers die in de aanvraag kunnen worden opgenomen. |
Ja | N.v.t. |
expose-headers | Dit element bevat header elementen die namen opgeven van de headers die toegankelijk zijn voor de client. |
Nee | N.v.t. |
Let op
Gebruik het *
jokerteken met zorg in beleidsinstellingen. Deze configuratie is mogelijk te slecht en kan een API kwetsbaarder maken voor bepaalde API-beveiligingsrisico's.
elementen van toegestane oorsprong
Name | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
origin | De waarde kan zijn * om alle oorsprongen toe te staan of een URI die één oorsprong aangeeft. De URI moet een schema, host en poort bevatten. Voer geen aanhalingstekens in. |
Ja | Als de poort wordt weggelaten in een URI, wordt poort 80 gebruikt voor HTTP en poort 443 voor HTTPS. |
kenmerken van toegestane methoden
Name | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
preflight-result-max-age | De Access-Control-Max-Age header in het voorbereidende antwoord wordt ingesteld op de waarde van dit kenmerk en heeft invloed op de mogelijkheid van de gebruikersagent om het preflight-antwoord in de cache op te cachen. Beleidsexpressies zijn toegestaan. |
Nee | 0 |
elementen met toegestane methoden
Name | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
methode | Hiermee geeft u een HTTP-woord. Beleidsexpressies zijn toegestaan. | Er is ten minste één method element vereist als de allowed-methods sectie aanwezig is. |
N.v.t. |
elementen voor toegestane headers
Name | Beschrijving | Vereist | Default |
---|---|---|---|
koptekst | Hiermee geeft u een headernaam. | Er is ten minste één header element vereist als allowed-headers deze sectie aanwezig is. |
N.v.t. |
elementen van expose-headers
Name | Beschrijving | Vereist | Default |
---|---|---|---|
koptekst | Hiermee geeft u een headernaam. | Er is ten minste één header element vereist als expose-headers deze sectie aanwezig is. |
N.v.t. |
Gebruik
- Beleidssecties: inkomend
- Beleidsbereik: globaal, werkruimte, product, API, bewerking
- Gateways: klassiek, v2, verbruik, zelf-hostend, werkruimte
Gebruiksnotities
- U kunt het
cors
beleid configureren op meer dan één bereik (bijvoorbeeld bij het productbereik en het globale bereik). Zorg ervoor dat hetbase
element is geconfigureerd bij de bewerking, API en productbereiken om de benodigde beleidsregels over te nemen in de bovenliggende bereiken. - Alleen het
cors
beleid wordt geëvalueerd op deOPTIONS
aanvraag tijdens de voorbereidende vlucht. Resterende geconfigureerde beleidsregels worden geëvalueerd op de goedgekeurde aanvraag.
- Dit beleid kan slechts eenmaal worden gebruikt in een beleidssectie.
Over CORS
CORS is een op HTTP-header gebaseerde standaard waarmee een browser en een server kunnen communiceren en bepalen of specifieke cross-origin-aanvragen (XMLHttpRequest
aanroepen van JavaScript op een webpagina naar andere domeinen al dan niet mogen worden toegestaan). Dit biedt meer flexibiliteit dan alleen aanvragen van dezelfde oorsprong toestaan, maar is veiliger dan het toestaan van alle cross-origin-aanvragen.
CORS specificeert twee soorten cross-origin-aanvragen:
Vooraf uitgevoerde (of 'preflight'-aanvragen : de browser verzendt eerst een HTTP-aanvraag met behulp van de
OPTIONS
methode naar de server om te bepalen of de werkelijke aanvraag mag worden verzonden. Als het serverantwoord deAccess-Control-Allow-Origin
header bevat die toegang toestaat, volgt de browser de werkelijke aanvraag.Eenvoudige aanvragen : deze aanvragen bevatten een of meer extra
Origin
headers, maar activeren geen CORS-voorbereidende bewerking. Alleen aanvragen die gebruikmaken van deGET
en methoden enHEAD
een beperkte set aanvraagheaders zijn toegestaan.
cors
beleidsscenario's
Configureer het cors
beleid in API Management voor de volgende scenario's:
Schakel de interactieve testconsole in de ontwikkelaarsportal in. Raadpleeg de documentatie over de ontwikkelaarsportal voor meer informatie.
Notitie
Wanneer u CORS inschakelt voor de interactieve console, configureert API Management standaard het
cors
beleid op het globale bereik.Schakel API Management in om voorbereidende aanvragen te beantwoorden of eenvoudige CORS-aanvragen door te geven wanneer de back-ends geen eigen CORS-ondersteuning bieden.
Notitie
Als een aanvraag overeenkomt met een bewerking met een
OPTIONS
methode die is gedefinieerd in de API, wordt de verwerkingslogica voor voorbereidende aanvragen die aan hetcors
beleid zijn gekoppeld, niet uitgevoerd. Dergelijke bewerkingen kunnen daarom worden gebruikt om aangepaste preflightverwerkingslogica te implementeren, bijvoorbeeld om hetcors
beleid alleen onder bepaalde voorwaarden toe te passen.
Veelvoorkomende configuratieproblemen
- Abonnementssleutel in koptekst : als u het
cors
beleid configureert op het productbereik en uw API gebruikmaakt van verificatie van abonnementssleutels, werkt het beleid niet wanneer de abonnementssleutel wordt doorgegeven in een header. Als tijdelijke oplossing kunt u aanvragen wijzigen om een abonnementssleutel op te nemen als queryparameter. - API met headerversiebeheer : als u het
cors
beleid configureert op het API-bereik en uw API gebruikmaakt van een schema voor headerversiebeheer, werkt het beleid niet omdat de versie wordt doorgegeven in een header. Mogelijk moet u een alternatieve versiebeheermethode configureren, zoals een pad- of queryparameter. - Beleidsvolgorde : u kunt onverwacht gedrag ondervinden als het
cors
beleid niet het eerste beleid is in de sectie Inkomend verkeer. Selecteer Effectief beleid berekenen in de beleidseditor om de volgorde van beleidsevaluatie voor elk bereik te controleren. Over het algemeen wordt alleen het eerstecors
beleid toegepast. - Leeg 200 OK-antwoord : in sommige beleidsconfiguraties worden bepaalde aanvragen voor cross-origin voltooid met een leeg
200 OK
antwoord. Dit antwoord wordt verwacht wanneerterminate-unmatched-request
deze is ingesteld op de standaardwaarde vantrue
en een binnenkomende aanvraag eenOrigin
header heeft die niet overeenkomt met een toegestane oorsprong die is geconfigureerd in hetcors
beleid.
Opmerking
In dit voorbeeld ziet u hoe u voorbereidende aanvragen ondersteunt , zoals aanvragen met aangepaste headers of andere methoden dan GET
en POST
. Als u aangepaste headers en andere HTTP-woorden wilt ondersteunen, gebruikt u de allowed-methods
en allowed-headers
secties, zoals wordt weergegeven in het volgende voorbeeld.
<cors allow-credentials="true">
<allowed-origins>
<!-- Localhost useful for development -->
<origin>http://localhost:8080/</origin>
<origin>http://example.com/</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="300">
<method>GET</method>
<method>POST</method>
<method>PATCH</method>
<method>DELETE</method>
</allowed-methods>
<allowed-headers>
<!-- Examples below show Azure Mobile Services headers -->
<header>x-zumo-installation-id</header>
<header>x-zumo-application</header>
<header>x-zumo-version</header>
<header>x-zumo-auth</header>
<header>content-type</header>
<header>accept</header>
</allowed-headers>
<expose-headers>
<!-- Examples below show Azure Mobile Services headers -->
<header>x-zumo-installation-id</header>
<header>x-zumo-application</header>
</expose-headers>
</cors>
Gerelateerd beleid
Gerelateerde inhoud
Zie voor meer informatie over het werken met beleid:
- Zelfstudie: Uw API transformeren en beveiligen
- Beleidsreferentie voor een volledige lijst met beleidsinstructies en hun instellingen
- Beleidsexpressies
- Beleid instellen of bewerken
- Beleidsconfiguraties opnieuw gebruiken
- Beleidsfragmentenopslagplaats
- Beleid ontwerpen met Behulp van Microsoft Copilot in Azure