CORS

GÄLLER FÖR: Alla API Management-nivåer

Principen cors lägger till cors-stöd (cross-origin resource sharing) till en åtgärd eller ett API för att tillåta korsdomänanrop från webbläsarbaserade klienter.

Kommentar

Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. För att hjälpa dig att konfigurera den här principen tillhandahåller portalen en guidad, formulärbaserad redigerare. Läs mer om hur du anger eller redigerar API Management-principer.

Principuttryck

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

Attribut

Namn beskrivning Obligatoriskt Standardvärde
allow-credentials Huvudet Access-Control-Allow-Credentials i preflight-svaret anges till värdet för det här attributet och påverkar klientens möjlighet att skicka autentiseringsuppgifter i begäranden mellan domäner. Principuttryck tillåts. Nej false
terminate-unmatched-request Styr bearbetningen av begäranden mellan ursprung som inte matchar principinställningarna. Principuttryck tillåts.

När OPTIONS begäran bearbetas som en förhandsbegäran och Origin huvudet inte matchar principinställningarna:
– Om attributet är inställt på trueavslutar du omedelbart begäran med ett tomt 200 OK svar
– Om attributet är inställt på falsekontrollerar du inkommande för andra principer inom omfånget cors som är direkt underordnade till det inkommande elementet och tillämpar dem. Om inga cors principer hittas avslutar du begäran med ett tomt 200 OK svar.

När GET eller HEAD begäran innehåller Origin huvudet (och därför bearbetas som en enkel begäran om korsande ursprung) och inte matchar principinställningarna:
– Om attributet är inställt på trueavslutar du omedelbart begäran med ett tomt 200 OK svar.
– Om attributet är inställt på falsetillåter du att begäran fortsätter normalt och lägger inte till CORS-huvuden i svaret.
Nej true

Element

Name beskrivning Obligatoriskt Standardvärde
allowed-origins Innehåller origin element som beskriver det tillåtna ursprunget för begäranden mellan domäner. allowed-origins kan innehålla antingen ett enda origin element som anger att ett ursprung ska tillåtas * , eller ett eller flera origin element som innehåller en URI. Ja Ej tillämpligt
allowed-methods Det här elementet krävs om andra metoder än GET eller POST tillåts. Innehåller method element som anger vilka HTTP-verb som stöds. Värdet * anger alla metoder. Nej Om det här avsnittet inte finns GET och POST stöds.
allowed-headers Det här elementet innehåller header element som anger namnen på de rubriker som kan ingå i begäran. Ja Ej tillämpligt
expose-headers Det här elementet innehåller header element som anger namnen på de rubriker som ska vara tillgängliga för klienten. Nej Ej tillämpligt

Varning

Använd jokertecknet * med försiktighet i principinställningarna. Den här konfigurationen kan vara alltför tillåtande och kan göra ett API mer sårbart för vissa API-säkerhetshot.

element med tillåtet ursprung

Name beskrivning Obligatoriskt Standardvärde
ursprung Värdet kan antingen * vara att tillåta alla ursprung eller en URI som anger ett enda ursprung. URI:n måste innehålla ett schema, en värd och en port. Inkludera inte citattecken. Ja Om porten utelämnas i en URI används port 80 för HTTP och port 443 används för HTTPS.

attribut för allowed-methods

Name beskrivning Obligatoriskt Standardvärde
preflight-result-max-age Huvudet Access-Control-Max-Age i preflight-svaret anges till värdet för det här attributet och påverkar användaragentens möjlighet att cachelagras preflight-svaret. Principuttryck tillåts. Nej 0

element med tillåtna metoder

Name beskrivning Obligatoriskt Standardvärde
metod Anger ett HTTP-verb. Principuttryck tillåts. Minst ett method element krävs om avsnittet allowed-methods finns. Ej tillämpligt

element för allowed-headers

Name beskrivning Obligatoriskt Standardvärde
sidhuvud Anger ett rubriknamn. Minst ett header element krävs i allowed-headers om det avsnittet finns. Ej tillämpligt

expose-headers-element

Name beskrivning Obligatoriskt Standardvärde
sidhuvud Anger ett rubriknamn. Minst ett header element krävs i expose-headers om det avsnittet finns. Ej tillämpligt

Användning

Användningsanteckningar

  • Du kan konfigurera cors principen i mer än ett omfång (till exempel i produktomfånget och det globala omfånget). Kontrollera att elementet base har konfigurerats vid åtgärden, API:et och produktomfattningarna för att ärva nödvändiga principer i de överordnade omfången.
  • cors Endast principen utvärderas på OPTIONS begäran under preflight. Återstående konfigurerade principer utvärderas på den godkända begäran.
  • Den här principen kan bara användas en gång i ett principavsnitt.

Om CORS

CORS är en HTTP-huvudbaserad standard som gör att en webbläsare och en server kan interagera och avgöra om specifika begäranden mellan ursprung ska tillåtas (XMLHttpRequest anrop som görs från JavaScript på en webbsida till andra domäner). Detta ger större flexibilitet än att bara tillåta begäranden med samma ursprung, men är säkrare än att tillåta alla begäranden mellan ursprung.

CORS anger två typer av begäranden mellan ursprung:

  • Förinställda (eller "preflight") begäranden – Webbläsaren skickar först en HTTP-begäran med hjälp av OPTIONS metoden till servern för att avgöra om den faktiska begäran tillåts skicka. Om serversvaret innehåller huvudet Access-Control-Allow-Origin som tillåter åtkomst följer webbläsaren med den faktiska begäran.

  • Enkla begäranden – Dessa begäranden innehåller en eller flera extra Origin huvuden men utlöser inte en CORS-preflight. Endast begäranden med metoderna GET och HEAD och en begränsad uppsättning begärandehuvuden tillåts.

cors principscenarier

cors Konfigurera principen i API Management för följande scenarier:

  • Aktivera den interaktiva testkonsolen i utvecklarportalen. Mer information finns i dokumentationen för utvecklarportalen.

    Kommentar

    När du aktiverar CORS för den interaktiva konsolen konfigurerar cors API Management som standard principen i det globala omfånget.

  • Aktivera API Management för att svara på förinställda begäranden eller skicka enkla CORS-begäranden när serverdelarna inte tillhandahåller sitt eget CORS-stöd.

    Kommentar

    Om en begäran matchar en åtgärd med en OPTIONS metod som definierats i API:et, körs inte logiken cors för bearbetning av preflight-begäranden som är associerad med principen. Därför kan sådana åtgärder användas för att implementera anpassad preflight-bearbetningslogik – till exempel för att endast tillämpa cors principen under vissa villkor.

Vanliga konfigurationsproblem

  • Prenumerationsnyckel i huvudet – Om du konfigurerar cors principen i produktomfånget och ditt API använder prenumerationsnyckelautentisering fungerar inte principen när prenumerationsnyckeln skickas i ett huvud. Som en lösning kan du ändra begäranden så att de inkluderar en prenumerationsnyckel som en frågeparameter.
  • API med versionshantering av huvuden – Om du konfigurerarcors principen i API-omfånget och ditt API använder ett schema för versionshantering av huvuden fungerar inte principen eftersom versionen skickas i ett huvud. Du kan behöva konfigurera en alternativ metod för versionshantering, till exempel en sökväg eller frågeparameter.
  • Principordning – Du kan uppleva oväntat beteende om cors principen inte är den första principen i det inkommande avsnittet. Välj Beräkna effektiv princip i principredigeraren för att kontrollera principutvärderingsordningen i varje omfång. I allmänhet tillämpas endast den första cors principen.
  • Tomt 200 OK-svar – I vissa principkonfigurationer slutförs vissa begäranden mellan ursprung med ett tomt 200 OK svar. Det här svaret förväntas när terminate-unmatched-request är inställt på standardvärdet true för och en inkommande begäran har ett Origin huvud som inte matchar ett tillåtet ursprung som konfigurerats i cors principen.

Exempel

Det här exemplet visar hur du stöder preflight-begäranden, till exempel sådana med anpassade rubriker eller andra metoder än GET och POST. Använd avsnitten allowed-methods och allowed-headers som visas i följande exempel för att stödja anpassade rubriker och andra HTTP-verb.

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

Mer information om hur du arbetar med principer finns i: