Jak włączyć CORS w swoim internetowym interfejsie API

Ograniczenia bezpieczeństwa dotyczące polityki bezpieczeństwa Twojej przeglądarki uniemożliwiają Twojej przeglądarce wysyłanie żądań AJAX do serwera w innej domenie. Jest to również znane jako zasada tego samego pochodzenia. Innymi słowy, wbudowane zabezpieczenia przeglądarki uniemożliwiają stronie internetowej jednej domeny wykonywanie wywołań AJAX w innej domenie.

Tutaj z pomocą przychodzi CORS (Cross-Origin Resource Sharing). CORS to standard W3C, który pozwala odejść od tej samej polityki pochodzenia przyjętej przez przeglądarki w celu ograniczenia dostępu z jednej domeny do zasobów należących do innej domeny. Możesz włączyć CORS dla swojego internetowego interfejsu API za pomocą odpowiedniego pakietu internetowego interfejsu API (w zależności od używanej wersji internetowego interfejsu API) lub oprogramowania pośredniczącego OWIN.

Zwróć uwagę, że źródło żądania składa się ze schematu, hosta i numeru portu. W związku z tym uznaje się, że dwa żądania pochodzą z tego samego źródła, jeśli mają ten sam schemat, host i numer portu. Jeśli którykolwiek z tych punktów różni się, wnioski uznaje się za pochodzące z różnych źródeł, tj. Za nienależące do identycznego pochodzenia.

Włącz obsługę CORS w ASP.NET Web API

ASP.NET Web API zapewnia doskonałą obsługę CORS. Aby zapewnić obsługę CORS w ASP.NET Web API 2, musisz użyć pakietu Microsoft.AspNet.WebApi.Cors NuGet. Aby zainstalować ten pakiet, możesz wykonać następujące polecenie z konsoli Menedżera pakietów NuGet.

Zainstaluj pakiet Microsoft.AspNet.WebApi.Cors

Alternatywnie możesz wybrać projekt w oknie Eksplorator rozwiązań i zainstalować pakiet za pośrednictwem Menedżera pakietów NuGet.

Jeśli używasz interfejsu API sieci Web w wersji 1.0, możesz włączyć obsługę CORS, w tym następujące instrukcje w programie obsługi zdarzeń Application_BeginRequest w pliku Global.asax.cs.

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

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

Zauważ, że „allowedOrigin” jest tutaj zmienną łańcuchową, która zawiera pochodzenie żądania, które chce uzyskać dostęp do zasobu. 

Obsługę CORS można włączyć na trzech poziomach. Należą do nich:

  • Poziom akcji
  • Poziom kontrolera
  • Poziom globalny

Włącz CORS na poziomie globalnym

Aby włączyć mechanizm CORS na poziomie globalnym, należy skorzystać z metody EnableCors klasy HttpConfiguration, jak pokazano we fragmencie kodu podanym poniżej.

public static void Register (konfiguracja HttpConfiguration)

        {

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

            EnableCorsAttribute cors = nowe EnableCorsAttribute (pochodzenie, "*", "GET, POST");

            config.EnableCors (cors);

            // Tutaj określ konfigurację i usługi interfejsu API sieci Web

            // Określ tutaj trasy internetowego interfejsu API          

        }

    }

Zapoznaj się z fragmentem kodu podanym powyżej. Zwróć uwagę, jak określono źródło żądania. Parametr * implikuje wszystkie nagłówki żądań. Zatem żądania GET i POST z określonej domeny zostaną zaakceptowane, a wszystkie inne żądania zostaną odrzucone.

Włącz CORS na poziomie kontrolera

Możesz również włączyć obsługę CORS na poziomie kontrolera. Aby to zrobić, określ atrybut [EnableCors] do kontrolera interfejsu API sieci Web, jak pokazano poniżej.

  [EnableCors (origins: "// localhost: 50164 /", nagłówki: "*", metody: "*")]

    public class AuthorsController: ApiController

    {  

        // Wpisz tutaj metody kontrolera interfejsu API sieci Web

    }

Włącz CORS na poziomie akcji

Podobnie można również włączyć CORS na poziomie akcji, używając atrybutu [EnableCORS]. Oto przykład, który ilustruje, jak to się robi.

public class AuthorsController: ApiController

    {

        [EnableCors (origins: "// localhost: 50164 /", nagłówki: "*", metody: "*")]

        public IEnumerable Get ()

        {

            zwraca nowy ciąg [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Wyłącz CORS dla określonej akcji

Teraz może być konieczne wyłączenie CORS dla określonej akcji lub grupy akcji. Ta funkcja może być przydatna, gdy już włączono mechanizm CORS na poziomie globalnym i chcesz go teraz wyłączyć dla jednej lub więcej akcji ze względów bezpieczeństwa. Poniższy fragment kodu ilustruje, jak można to osiągnąć za pomocą atrybutu [DisableCors].

[DisableCors ()]

public IEnumerable Get ()

   {

      zwraca nowy ciąg [] {"Joydip Kanjilal", "Steve Smith"};

   }

Jeśli używasz ASP.NET Core, należy dodać pakiet Microsoft.AspNetCore.Cors za pośrednictwem NuGet do projektu, a następnie napisać następującą instrukcję w pliku Startup.cs, aby skonfigurować obsługę CORS.

public void ConfigureServices (usługi IServiceCollection)

{

    services.AddCors ();

}

Możesz włączyć CORS za pomocą oprogramowania pośredniczącego CORS - możesz skorzystać w tym zakresie z metody rozszerzenia UseCors. Alternatywnie możesz włączyć CORS na kontrolerze lub na poziomach akcji przy użyciu atrybutu EnableCors w taki sam sposób, jak zrobiliśmy to wcześniej w tym artykule. Podobnie, aby wyłączyć CORS, możesz użyć atrybutu [DisableCors].