Programiranje

Kako zaščititi spletne API-je ASP.Net s pomočjo avtorizacijskih filtrov

Varnost je glavna skrb spletnih aplikacij za podjetja. Ko morate podatke prenositi prek žice, se morate zavedati različnih orodij, s katerimi lahko te podatke zaščitite.

ASP.Net Web API je lahek okvir, ki se uporablja za izdelavo storitev RESTful brez državljanstva, ki se izvajajo na HTTP. Eden od načinov za zaščito storitev spletnega API-ja je avtorizacijski filtri.

V idealnem primeru bi morali preverjanje pristnosti in avtorizacijo izvesti zgodaj v cevovodu Web API. To pomaga odstraniti nepotrebne režijske stroške obdelave iz cikla zahteve. Ne glede na to, ali za preverjanje pristnosti uporabljate module HTTP ali upravljalnike sporočil HTTP, lahko trenutnega glavnega uporabnika (tj. Uporabnika) prikličete iz ApiController.User lastnine.

Upoštevajte tudi, da se filtri za avtorizacijo spletnega API-ja izvedejo pred metodami delovanja krmilnika. Torej, če dohodna zahteva ni odobrena, bo storitev vrnila napako, zahteva bo prezrta in način dejanja storitve ne bo izveden.

Uporaba avtorizacijskega filtra AuthorizeAttribute

Vgrajeni filter za avtorizacijo AuthorizeAttribute se lahko uporablja za avtorizacijo dohodnih zahtev. Lahko uporabišAuthorizeAttribute da preverite, ali je uporabnik overjen. Če uporabnik ni overjen, bo vrnil kodo stanja HTTP 401. To pooblastilo lahko v spletnem API-ju uporabite globalno ali na ravni krmilnika.

Upoštevajte, da lahko za odobritev dostopa do načinov krmilnika uporabite tudi upravljalnik sporočil po meri, saj se filtri sporočil izvajajo veliko prej v življenjskem ciklusu spletnega API-ja.

Če želite omejiti dostop do vseh krmilnikov, lahko dodate AuthorizeAttribute globalno do Filtri zbirka HttpConfiguration primer. Naslednji delček kode prikazuje, kako lahko dodate AuthorizeAttribute do Filtri zbirka HttpConfiguration predmet.

javni statični void Register (HttpConfiguration config)

        {

// Konfiguracija in storitve spletnega API-ja

// Poti spletnega API-ja

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

ime: "DefaultApi",

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

   privzeto: novo {id = RouteParameter.O optional}

            ); 

config.Filters.Add (novo AuthorizeAttribute ());

        } 

Uporaba atributa Authorize

Na ravni krmilnika lahko dostop omejite z uporabo Dovoli atribut, kot je prikazano v naslednjem delčku kode.

[Dovoli]

javni razred EmployeesController: ApiController

{

// Tukaj napišite metode, ki ustrezajo glagolom Http

}

Uporabite lahko tudi Dovoli atribut na ravni akcije, da omeji dostop do določene metode dejanja. Naslednji delček kode prikazuje, kako je to mogoče izvesti.

javni razred EmployeesController: ApiController

{

public HttpResponseMessage Get () {// Nekaj ​​kode}

// Zahtevaj dovoljenje za določeno dejanje.

[Dovoli]

public HttpResponseMessage Post (Employee emp) {// Nekaj ​​kode}

V delčku kode, ki je bil prikazan prej, dostop do datoteke Objavi () metoda je omejena, medtem ko je dostop do datoteke Pridobite () metoda ni omejena. Lahko tudi omejite krmilnik in nato omogočite anonimen dostop do enega ali več načinov dejanja. Delček kode, ki sledi, to ponazarja.

javni razred EmployeesController: ApiController

{

public HttpResponseMessage Get () {// Nekaj ​​kode}

[AllowAnonymous]

public HttpResponseMessage Post (Employee emp) {// Nekaj ​​kode}

}

Dovoli dejanja po vlogah in uporabnikih

Prav tako je mogoče omejiti dostop do akcijskih metod glede na vloge in uporabnike. Naslednji delček kode prikazuje, kako je to mogoče doseči.

[Pooblasti (Uporabniki = "Joydip, Jini")] // Omeji dostop uporabnika

javni razred EmployeesController: ApiController

{

// Tukaj napišite metode, ki ustrezajo glagolom Http

}

V zgornjem primeru nadzornik Employees omeji dostop samo na uporabnika Joydip in Jini. Spodnja koda prikazuje, kako lahko omejite dostop po vlogah.

[Pooblasti (Vloge = "Skrbniki")] // Omeji glede na vloge

javni razred EmployeesController: ApiController

{

// Tukaj napišite metode, ki ustrezajo glagolom Http

}

Vedno lahko dostopate do ApiController.User lastnost znotraj metode krmilnika za pridobivanje trenutnega načela in odobritev pooblastila na podlagi vloge uporabnika. To je prikazano v spodnjem seznamu kod.

public HttpResponseMessage Get ()

{

if (User.IsInRole (“Administrators”))

    {

// Tukaj napišite kodo

    }

}

Uporaba filtrov za avtorizacijo po meri v spletnem API-ju ASP.Net

Avtorizacijski filter je razred, ki razširja AuthorizationFilterAttribute razred in preglasi OnAuthorization () metoda. To je metoda, pri kateri lahko napišete logiko avtorizacije. Če pooblastilo ne uspe, lahko vrnete primerek datoteke UnauthorizedException razred ali celo po meri HttpResponseMessage.

Naslednji seznam kod prikazuje, kako lahko implementirate razred po meri za odobritev zahtev za vaš spletni API. Upoštevajte, da morate razširiti AuthorizeAttribute razred za izvedbo lastnega razreda filtra za avtorizacijo.

javni razred CustomAuthorizeAttribute: AuthorizeAttribute

    {

javno razveljavi void OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

if (AuthorizeRequest (actionContext))

            {

vrnitev;

            }

HandleUnauthorizedRequest (actionContext);

        }

zaščitena razveljavitev void HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Koda za obdelavo nepooblaščene zahteve

        }

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

        {

// Tukaj napišite kodo za izvedbo pooblastila

vrni res;

        }

    }

$config[zx-auto] not found$config[zx-overlay] not found