CORS

PLATÍ PRO: Všechny úrovně služby API Management

Zásada cors přidává podporu sdílení prostředků mezi zdroji (CORS) k operaci nebo rozhraní API, aby bylo možné volat mezi doménami z klientů založených na prohlížeči.

Poznámka:

Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Portál poskytuje průvodce editorem založeným na formulářích, který vám pomůže s konfigurací této zásady. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.

Prohlášení o zásadách

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

Atributy

Jméno Popis Požaduje se Výchozí
allow-credentials Hlavička Access-Control-Allow-Credentials v předběžné odpovědi se nastaví na hodnotu tohoto atributu a ovlivní schopnost klienta odesílat přihlašovací údaje v požadavcích mezi doménou. Výrazy zásad jsou povolené. No false
terminate-unmatched-request Řídí zpracování požadavků mezi zdroji, které neodpovídají nastavení zásad. Výrazy zásad jsou povolené.

Když OPTIONS se požadavek zpracuje jako předběžný požadavek a Origin hlavička neodpovídá nastavení zásad:
- Pokud je atribut nastaven na true, okamžitě ukončete požadavek prázdnou 200 OK odpovědí.
– Pokud je atribut nastaven na false, zkontrolujte příchozí u jiných zásad v oboru cors , které jsou přímé podřízené položky příchozího elementu, a použijte je. Pokud nejsou nalezeny žádné cors zásady, ukončete žádost prázdnou 200 OK odpovědí.

Pokud GET nebo HEAD požadavek obsahuje hlavičku Origin (a proto se zpracuje jako jednoduchý požadavek mezi zdroji) a neodpovídá nastavení zásad:
- Pokud je atribut nastaven na true, okamžitě ukončete požadavek prázdnou 200 OK odpovědí.
– Pokud je atribut nastavený na false, povolte požadavku normální pokračování a nepřidávejte do odpovědi hlavičky CORS.
No true

Elementy

Název Popis Požaduje se Výchozí
povolené zdroje Obsahuje origin prvky, které popisují povolené zdroje pro požadavky mezi doménami. allowed-origins může obsahovat jeden origin prvek, který určuje * , že má povolit jakýkoli původ, nebo jeden nebo více origin prvků, které obsahují identifikátor URI. Yes
allowed-methods Tento prvek je povinný, pokud jsou povoleny jiné GET metody nebo POST jsou povoleny. Obsahuje method prvky, které určují podporované příkazy HTTP. Hodnota * označuje všechny metody. No Pokud tento oddíl není k dispozici GET a POST podporuje se.
allowed-headers Tento element obsahuje header prvky určující názvy hlaviček, které lze zahrnout do požadavku. Yes
expose-headers Tento element obsahuje header prvky určující názvy hlaviček, které budou přístupné klientem. No

Upozornění

* V nastavení zásad používejte zástupný znak s opatrností. Tato konfigurace může být příliš přesvědčivá a může být rozhraní API zranitelnější vůči určitým hrozbám zabezpečení rozhraní API.

prvky s povolenými zdroji

Název Popis Požaduje se Výchozí
origin (zdroj) Hodnota může být buď * povolení všech zdrojů, nebo identifikátor URI, který určuje jeden zdroj. Identifikátor URI musí obsahovat schéma, hostitele a port. Nezadávejte uvozovky. Ano Pokud je port vynechán v identifikátoru URI, použije se port 80 pro PROTOKOL HTTP a port 443 se používá pro HTTPS.

atributy allowed-methods

Název Popis Požaduje se Výchozí
preflight-result-max-age Hlavička Access-Control-Max-Age v předběžné odpovědi se nastaví na hodnotu tohoto atributu a ovlivní schopnost uživatelského agenta ukládat předběžnou odpověď do mezipaměti. Výrazy zásad jsou povolené. No 0

povolené elementy metod

Název Popis Požaduje se Výchozí
metoda Určuje příkaz HTTP. Výrazy zásad jsou povolené. Nejméně jeden method prvek je vyžadován, pokud allowed-methods je oddíl k dispozici.

povolené elementy záhlaví

Název Popis Požaduje se Výchozí
záhlaví Určuje název záhlaví. Nejméně jeden header prvek je vyžadován v allowed-headers případě, že je tento oddíl k dispozici.

prvky zpřístupňované hlavičky

Název Popis Požaduje se Výchozí
záhlaví Určuje název záhlaví. Nejméně jeden header prvek je vyžadován v expose-headers případě, že je tento oddíl k dispozici.

Využití

Poznámky k využití

  • Zásady můžete nakonfigurovat cors ve více než jednom oboru (například v oboru produktu a globálním rozsahu). Ujistěte se, že base je element nakonfigurovaný v rozsahech operací, rozhraní API a produktů tak, aby dědil potřebné zásady v nadřazených oborech.
  • cors Během předběžného letu se vyhodnocují OPTIONS pouze zásady na požadavku. Zbývající nakonfigurované zásady se vyhodnocují na schválené žádosti.
  • Tuto zásadu je možné v oddílu zásad použít jenom jednou.

Informace o CORS

CORS je standard založený na hlavičce HTTP, který umožňuje prohlížeči a serveru interagovat a určit, jestli mají povolit konkrétní požadavky mezi zdroji (XMLHttpRequest volání z JavaScriptu na webové stránce do jiných domén). To umožňuje větší flexibilitu než povolení pouze požadavků stejného zdroje, ale je bezpečnější než povolení všech požadavků mezi zdroji.

CORS určuje dva typy požadavků mezi zdroji:

  • Předběžné (nebo předběžné) požadavky – prohlížeč nejprve odešle požadavek HTTP pomocí OPTIONS metody na server, aby zjistil, jestli je skutečný požadavek povolený k odeslání. Pokud odpověď serveru obsahuje hlavičku Access-Control-Allow-Origin , která umožňuje přístup, prohlížeč následuje se skutečným požadavkem.

  • Jednoduché požadavky – Tyto požadavky zahrnují jednu nebo více hlaviček navíc Origin , ale neaktivují předběžný výstup CORS. Jsou povoleny pouze požadavky používající metody GET a HEAD omezenou sadu hlaviček požadavků.

cors scénáře zásad

Nakonfigurujte zásady ve službě cors API Management pro následující scénáře:

  • Na portálu pro vývojáře povolte interaktivní testovací konzolu. Podrobnosti najdete v dokumentaci k portálu pro vývojáře .

    Poznámka:

    Když povolíte CORS pro interaktivní konzolu, služba API Management ve výchozím nastavení nakonfiguruje cors zásady v globálním oboru.

  • Povolte API Management odpovídat na předběžné požadavky nebo předávat jednoduché žádosti CORS, když back-endy neposkytují vlastní podporu CORS.

    Poznámka:

    Pokud požadavek odpovídá operaci s metodou definovanou OPTIONS v rozhraní API, logika předběžného zpracování požadavků přidružená k cors zásadě se nespustí. Tyto operace se proto dají použít k implementaci vlastní logiky předběžného cors zpracování – například k použití zásad pouze za určitých podmínek.

Běžné problémy s konfigurací

  • Klíč předplatného v hlavičce – Pokud zásadu cors nakonfigurujete v oboru produktu a vaše rozhraní API používá ověřování pomocí klíče předplatného, zásady nebudou fungovat, když se klíč předplatného předá v hlavičce. Alternativním řešením je upravit požadavky tak, aby jako parametr dotazu obsahovaly klíč předplatného.
  • Rozhraní API s správou verzí hlaviček – Pokud nakonfigurujete zásadu corsv oboru rozhraní API a vaše rozhraní API používá schéma správy verzí hlaviček, zásady nebudou fungovat, protože verze se předává v hlavičce. Možná budete muset nakonfigurovat alternativní metodu správy verzí, jako je cesta nebo parametr dotazu.
  • Pořadí zásad – V případě, cors že zásady nejsou první zásadou v příchozí části, může docházet k neočekávanému chování. Výběrem možnosti Vypočítat efektivní zásady v editoru zásad zkontrolujte pořadí vyhodnocení zásad v jednotlivých oborech. Obecně platí, že se použijí pouze první cors zásady.
  • Prázdná odpověď 200 OK – v některých konfiguracích zásad se některé požadavky mezi zdroji dokončí s prázdnou 200 OK odpovědí. Tato odpověď se očekává, když terminate-unmatched-request je nastavená výchozí hodnota true a příchozí požadavek má hlavičku Origin , která neodpovídá povolenému zdroji nakonfigurovaným v zásadách cors .

Příklad

Tento příklad ukazuje, jak podporovat předběžné požadavky, například ty, které mají vlastní hlavičky nebo jiné metody než GET a POST. Pokud chcete podporovat vlastní hlavičky a další příkazy HTTP, použijte allowed-methods oddíly a allowed-headers oddíly, jak je znázorněno v následujícím příkladu.

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

Další informace o práci se zásadami najdete v tématech: