Programování

Jak povolit CORS ve vašem webovém rozhraní API

Omezení zabezpečení v zásadách zabezpečení vašeho prohlížeče brání vašemu webovému prohlížeči v zadávání požadavků AJAX na server v jiné doméně. Toto se také nazývá politika stejného původu. Jinými slovy integrované zabezpečení prohlížeče brání webové stránce jedné domény ve spouštění volání AJAX v jiné doméně.

Tady přichází na pomoc CORS (Cross-Origin Resource Sharing). CORS je standard W3C, který vám umožňuje dostat se pryč od stejné zásady původu přijaté prohlížeči k omezení přístupu z jedné domény na prostředky patřící do jiné domény. CORS pro své webové API můžete povolit pomocí příslušného balíčku webového rozhraní API (v závislosti na použité verzi webového rozhraní API) nebo middlewaru OWIN.

Všimněte si, že původ požadavku se skládá ze schématu, hostitele a čísla portu. Takže dva požadavky jsou považovány za ze stejného původu, pokud mají stejné schéma, hostitele a číslo portu. Pokud se některý z nich liší, jsou žádosti považovány za křížový původ, tj. Nepatřící ke stejnému původu.

Povolte podporu CORS ve webovém rozhraní API ASP.NET

Webové rozhraní API ASP.NET poskytuje vynikající podporu pro CORS. Chcete-li poskytnout podporu pro CORS v ASP.NET Web API 2, musíte použít balíček Microsoft.AspNet.WebApi.Cors NuGet. Chcete-li nainstalovat tento balíček, můžete spustit následující příkaz z konzoly správce balíčků NuGet.

Instalační balíček Microsoft.AspNet.WebApi.Cors

Alternativně můžete vybrat svůj projekt v okně Průzkumníka řešení a nainstalovat balíček pomocí správce balíčků NuGet.

Pokud používáte Web API 1.0, můžete povolit podporu CORS včetně následujících příkazů v obslužné rutině události Application_BeginRequest souboru Global.asax.cs.

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Origin", enabledOrigin);

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST");

Všimněte si, že „enabledOrigin“ je řetězcová proměnná, která obsahuje původ požadavku, který chce získat přístup ke zdroji.

Podporu CORS lze povolit na třech úrovních. Patří mezi ně následující:

  • Akční úroveň
  • Úroveň ovladače
  • Globální úroveň

Povolte CORS na globální úrovni

Chcete-li povolit CORS na globální úrovni, budete muset využít metodu EnableCors třídy HttpConfiguration, jak je ukázáno ve fragmentu kódu uvedeném níže.

public static void Register (HttpConfiguration config)

        {

string origin = "// localhost: 50164 / WebClient /";

EnableCorsAttribute cors = new EnableCorsAttribute (origin, "*", "GET, POST");

config.EnableCors (cors);

// Zde zadejte konfiguraci a služby webového API

// Zde zadejte trasy webového API

        }

    }

Viz výše uvedený fragment kódu. Všimněte si, jak byl zadán původ požadavku. Parametr * implikuje všechny hlavičky požadavků. Takže požadavky GET a POST ze zadané domény budou přijaty, všechny ostatní požadavky budou odmítnuty.

Povolte CORS na úrovni řadiče

Můžete také povolit podporu CORS na úrovni řadiče. Chcete-li to provést, zadejte atribut [EnableCors] vašemu řadiči webového API, jak je uvedeno níže.

  [EnableCors (původ: "// localhost: 50164 /", záhlaví: "*", metody: "*")]

veřejná třída AuthorsController: ApiController

    {  

// Sem napište vaše metody řadiče webového API

    }

Povolte CORS na úrovni akce

Podobně můžete také povolit CORS na úrovni akce pomocí atributu [EnableCORS]. Zde je příklad, který ilustruje, jak se to děje.

veřejná třída AuthorsController: ApiController

    {

[EnableCors (původ: "// localhost: 50164 /", záhlaví: "*", metody: "*")]

public IEnumerable Get ()

        {

vrátit nový řetězec [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Zakázat CORS pro konkrétní akci

Možná budete muset zakázat CORS pro konkrétní akci nebo skupinu akcí. Tato funkce může být užitečná, pokud jste již povolili CORS na globální úrovni a nyní ji chcete z bezpečnostních důvodů deaktivovat pro jednu nebo více akcí. Následující fragment kódu ukazuje, jak toho lze dosáhnout pomocí atributu [DisableCors].

[DisableCors ()]

public IEnumerable Get ()

   {

vrátit nový řetězec [] {"Joydip Kanjilal", "Steve Smith"};

   }

Pokud používáte ASP.NET Core, měli byste přidat balíček Microsoft.AspNetCore.Cors prostřednictvím NuGet do svého projektu a poté napsat následující příkaz do souboru Startup.cs a nastavit podporu CORS.

public void ConfigureServices (služby IServiceCollection)

{

services.AddCors ();

}

CORS můžete povolit pomocí middlewaru CORS - v tomto ohledu můžete využít metodu rozšíření UseCors. Alternativně můžete povolit CORS na úrovni řadiče nebo akce pomocí atributu EnableCors podobně, jako jsme to udělali dříve v tomto článku. Podobně můžete pro deaktivaci CORS použít atribut [DisableCors].