Programmēšana

Kā nodrošināt ASP.Net Web API, izmantojot autorizācijas filtrus

Tīmekļa uzņēmumu lietojumprogrammās galvenā problēma ir drošība. Kad jums jāpārsūta dati pa vadu, jums jāzina dažādi rīki, kurus varat izmantot šo datu aizsardzībai.

ASP.Net Web API ir viegls ietvars, ko izmanto bezvalstnieku RESTful pakalpojumu, kas darbojas ar HTTP, izveidošanai. Viens no veidiem, kā nodrošināt Web API pakalpojumus, ir autorizācijas filtri.

Ideālā gadījumā autentifikācija un autorizācija jāveic jau Web API cauruļvada sākumā. Tas palīdz novērst nevajadzīgas apstrādes izmaksas no pieprasījumu cikla. Ņemiet vērā, ka neatkarīgi no tā, vai autentifikācijai izmantojat HTTP moduļus vai HTTP ziņojumu apstrādātājus, pašreizējo pilnvarotāju (t.i., lietotāju) varat izgūt no ApiController.User īpašums.

Ņemiet vērā arī to, ka Web API autorizācijas filtri tiek izpildīti pirms kontroliera darbības metodēm. Tātad, ja ienākošais pieprasījums nav autorizēts, no pakalpojuma tiks atgriezta kļūda, pieprasījums tiks ignorēts un pakalpojuma darbības metode netiks izpildīta.

Autorizācijas filtra AuthorizeAttribute izmantošana

Iebūvētais autorizācijas filtrs AuthorizeAttribute var izmantot ienākošo pieprasījumu autorizēšanai. Tu vari izmantotAuthorizeAttribute lai pārbaudītu, vai lietotājs ir autentificēts. Ja lietotājs nav autentificēts, tas atgriezīs HTTP statusa kodu 401. Šo pilnvarojumu var izmantot Web API globāli vai kontroliera līmenī.

Ņemiet vērā, ka varat arī ieviest pielāgotu ziņojumu apstrādātāju, lai autorizētu piekļuvi kontroliera metodēm, jo ​​ziņojumu filtri tiek izpildīti daudz agrāk Web API dzīves ciklā.

Lai ierobežotu piekļuvi visiem kontrolleriem, varat pievienot AuthorizeAttribute globāli Filtri kolekcija HttpKonfigurācija instancē. Šis koda fragments parāda, kā jūs varat pievienot AuthorizeAttribute uz Filtri kolekcija HttpKonfigurācija objekts.

public static void Register (HttpConfiguration config)

        {

// Tīmekļa API konfigurācija un pakalpojumi

// Tīmekļa API maršruti

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

nosaukums: “DefaultApi”,

routeTemplate: “api / {kontrolieris} / {id}",

   noklusējumi: new {id = RouteParameter.Optional}

            ); 

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

        } 

Atribūta Authorize izmantošana

Kontroliera līmenī varat ierobežot piekļuvi, lietojot Autorizēt atribūts, kā parādīts tālāk sniegtajā koda fragmentā.

[Autorizēt]

publiskā klase EmployeesController: ApiController

{

// Šeit rakstiet metodes, kas atbilst Http darbības vārdiem

}

Varat arī izmantot Autorizēt atribūts darbības līmenī, lai ierobežotu piekļuvi noteiktai darbības metodei. Šis koda fragments parāda, kā to var ieviest.

publiskā klase EmployeesController: ApiController

{

public HttpResponseMessage Get () {// Daži kodi}

// Pieprasīt autorizāciju konkrētai darbībai.

[Autorizēt]

public HttpResponseMessage Post (Employee emp) {// Daži kodi}

Iepriekš parādītajā koda fragmentā piekļūstiet Izlikt () metode ir ierobežota, kamēr piekļuve Gūt() metode nav ierobežota. Varat arī ierobežot kontrolieri un pēc tam nodrošināt anonīmu piekļuvi vienai vai vairākām darbības metodēm. Tālāk redzamais koda fragments to ilustrē.

publiskā klase EmployeesController: ApiController

{

public HttpResponseMessage Get () {// Daži kodi}

[AllowAnonymous]

public HttpResponseMessage Post (Employee emp) {// Daži kodi}

}

Autorizēt darbības pēc lomām un lietotājiem

Ir arī iespējams ierobežot lomu un lietotāju piekļuvi darbības metodēm. Šis koda fragments parāda, kā to var panākt.

[Autorizēt (Lietotāji = "Joydip, Jini")] // Ierobežot lietotāja piekļuvi

publiskā klase EmployeesController: ApiController

{

// Šeit rakstiet metodes, kas atbilst Http darbības vārdiem

}

Iepriekš minētajā piemērā kontrolieris darbinieki ierobežo piekļuvi tikai lietotājiem Joydip un Jini. Zemāk redzamais kods parāda, kā piekļuvi var ierobežot pēc lomām.

[Autorizēt (Roles = "Administratori")] // Ierobežot pēc lomām

publiskā klase EmployeesController: ApiController

{

// Šeit rakstiet metodes, kas atbilst Http darbības vārdiem

}

Jūs vienmēr varat piekļūt ApiController.User kontrolierīces metodē, lai izgūtu pašreizējo principu un piešķirtu autorizāciju, pamatojoties uz lietotāja lomu. Tas ir parādīts zemāk esošajā kodu sarakstā.

public HttpResponseMessage Get ()

{

ja (User.IsInRole (“Administratori”))

    {

// Uzrakstiet savu kodu šeit

    }

}

Pielāgotu autorizācijas filtru izmantošana ASP.Net Web API

Autorizācijas filtrs ir klase, kas paplašina AuthorizationFilterAttribute klasi un ignorē OnAuthorization () metodi. Šī ir metode, kurā varat rakstīt autorizācijas loģiku. Ja autorizācija neizdodas, varat atgriezt Neautorizēts izņēmums klase vai pat pasūtījums HttpResponseMessage.

Šis kodu saraksts parāda, kā jūs varat ieviest pielāgotu klasi, lai autorizētu pieprasījumus savai tīmekļa API. Ņemiet vērā, ka jums jāpagarina AuthorizeAttribute klasē, lai ieviestu savu autorizācijas filtru klasi.

publiskā klase CustomAuthorizeAttribute: AuthorizeAttribute

    {

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

        {

ja (AuthorizeRequest (actionContext))

            {

atgriešanās;

            }

HandleUnauthorizedRequest (actionContext);

        }

aizsargāts ignorēt spēkā neesošu HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Kods, lai apstrādātu neautorizētu pieprasījumu

        }

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

        {

// Uzrakstiet savu kodu šeit, lai veiktu autorizāciju

atgriezties taisnība;

        }

    }

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