Programování

Jak zabezpečit webové rozhraní API ASP.Net pomocí autorizačních filtrů

Zabezpečení je hlavním problémem webových podnikových aplikací. Pokud potřebujete přenášet data po drátu, měli byste si být vědomi různých nástrojů, které můžete použít k zabezpečení těchto dat.

ASP.Net Web API je odlehčený rámec používaný pro vytváření bezstavových služeb RESTful, které běží na HTTP. Jedním ze způsobů, jak zabezpečit služby webového API, jsou autorizační filtry.

V ideálním případě byste měli provést ověřování a autorizaci na začátku kanálu webového rozhraní API. To pomáhá eliminovat zbytečné režie zpracování z cyklu požadavků. Všimněte si, že ať už pro ověření používáte moduly HTTP nebo obslužné rutiny zpráv HTTP, můžete načíst aktuálního instančního objektu (tj. Uživatele) z ApiController.User vlastnictví.

Mějte také na paměti, že autorizační filtry webového rozhraní API se provádějí před metodami akce řadiče. Pokud tedy příchozí požadavek není autorizován, bude ze služby vrácena chyba, požadavek bude ignorován a akční metoda služby nebude provedena.

Pomocí autorizačního filtru AuthorizeAttribute

Integrovaný autorizační filtr AuthorizeAttribute lze použít k autorizaci příchozích požadavků. Můžeš použítAuthorizeAttribute zkontrolovat, zda je uživatel ověřen. Pokud uživatel není ověřen, vrátí stavový kód HTTP 401. Toto povolení lze použít ve webovém rozhraní API globálně nebo na úrovni řadiče.

Všimněte si, že můžete také implementovat vlastní obslužnou rutinu zpráv, která autorizuje přístup k vašim metodám řadiče, protože filtry zpráv se spouštějí mnohem dříve v životním cyklu webového rozhraní API.

Chcete-li omezit přístup ke všem řadičům, můžete přidat AuthorizeAttribute globálně do Filtry sbírka HttpConfiguration instance. Následující fragment kódu ukazuje, jak můžete přidat AuthorizeAttribute do Filtry sbírka HttpConfiguration objekt.

public static void Register (HttpConfiguration config)

        {

// Konfigurace a služby webového API

// Trasy webového API

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

název: „DefaultApi“,

routeTemplate: “api / {controller} / {id}”,

   výchozí: nový {id = RouteParameter.Optional}

            ); 

config.Filters.Add (nový AuthorizeAttribute ());

        } 

Pomocí atributu Autorizovat

Na úrovni správce můžete omezit přístup použitím Povolit atribut, jak je znázorněno v níže uvedeném fragmentu kódu.

[Povolit]

public class EmployeesController: ApiController

{

// Sem napište metody, které odpovídají Httpovým slovesům

}

Můžete také použít Povolit atribut na úrovni akce omezit přístup k určité metodě akce. Následující fragment kódu ukazuje, jak to lze implementovat.

public class EmployeesController: ApiController

{

public HttpResponseMessage Get () {// Nějaký kód}

// Vyžadovat autorizaci pro konkrétní akci.

[Povolit]

public HttpResponseMessage Post (emp emp) {// Nějaký kód}

Ve fragmentu kódu zobrazeném dříve přístup k Pošta() metoda je omezena, zatímco přístup k Dostat() metoda není omezena. Můžete také omezit správce a poté poskytnout anonymní přístup k jedné nebo více metodám akce. Následující fragment kódu to ilustruje.

public class EmployeesController: ApiController

{

public HttpResponseMessage Get () {// Nějaký kód}

[AllowAnonymous]

public HttpResponseMessage Post (emp emp) {// Nějaký kód}

}

Autorizujte akce podle rolí a uživatelů

Je také možné omezit přístup k metodám akcí rolemi a uživateli. Následující fragment kódu ukazuje, jak toho lze dosáhnout.

[Autorizovat (Uživatelé = "Joydip, Jini")] // Omezit přístup podle uživatele

public class EmployeesController: ApiController

{

// Sem napište metody, které odpovídají Httpovým slovesům

}

Ve výše uvedeném příkladu řadič Zaměstnanci omezuje přístup pouze na uživatele Joydip a Jini. Níže uvedený kód ukazuje, jak můžete omezit přístup podle rolí.

[Autorizovat (role = "administrátoři")] // Omezeno podle rolí

public class EmployeesController: ApiController

{

// Sem napište metody, které odpovídají Httpovým slovesům

}

Vždy máte přístup k ApiController.User vlastnost uvnitř metody řadiče k načtení aktuálního principu a udělení autorizace na základě role uživatele. To se zobrazuje v seznamu kódů níže.

veřejné HttpResponseMessage Get ()

{

if (User.IsInRole („Správci“))

    {

// Sem napište kód

    }

}

Používání vlastních autorizačních filtrů v ASP.Net Web API

Autorizační filtr je třída, která rozšiřuje AuthorizationFilterAttribute třídy a přepíše OnAuthorization () metoda. Toto je metoda, kde můžete napsat autorizační logiku. Pokud autorizace selže, můžete vrátit instanci Neoprávněná výjimka třída nebo dokonce zvyk HttpResponseMessage.

Následující výpis kódu ukazuje, jak můžete implementovat vlastní třídu pro autorizaci požadavků na vaše webové API. Měli byste rozšířit AuthorizeAttribute třídy k implementaci vlastní třídy autorizačního filtru.

veřejná třída CustomAuthorizeAttribute: AuthorizeAttribute

    {

public override void OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

if (AuthorizeRequest (actionContext))

            {

vrátit se;

            }

HandleUnauthorizedRequest (actionContext);

        }

protected override void HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Kód pro zpracování neoprávněného požadavku

        }

private bool AuthorizeRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Sem zadejte svůj kód k provedení autorizace

návrat true;

        }

    }