Programavimas

Kaip apsaugoti ASP.Net žiniatinklio API naudojant autorizacijos filtrus

Saugumas kelia didžiausią susirūpinimą internetinėse įmonių programose. Kai jums reikia perduoti duomenis per laidą, turėtumėte žinoti apie įvairius įrankius, kuriuos galite naudoti šiems duomenims apsaugoti.

ASP.Net žiniatinklio API yra lengva sistema, naudojama kuriant be pilietybės RESTful paslaugas, kurios veikia HTTP. Vienas iš būdų apsaugoti žiniatinklio API paslaugas yra autorizacijos filtrai.

Idealiu atveju turėtumėte atlikti tapatybės nustatymą ir prieigą prie žiniatinklio API. Tai padeda pašalinti nereikalingas apdorojimo išlaidas iš užklausos ciklo. Atkreipkite dėmesį, kad nesvarbu, ar autentifikavimui naudojate HTTP modulius, ar HTTP pranešimų tvarkytuvus, galite gauti dabartinį pagrindinį asmenį (t. Y. Vartotoją) iš „ApiController“. Vartotojas nuosavybė.

Taip pat nepamirškite, kad žiniatinklio API autorizacijos filtrai vykdomi prieš valdiklio veiksmų metodus. Taigi, jei gaunama užklausa nebus autorizuota, iš paslaugos bus grąžinta klaida, užklausa bus ignoruojama ir tarnybos veiksmo metodas nebus vykdomas.

Naudojant „AuthorizeAttribute“ prieigos teisių filtrą

Integruotas autorizacijos filtras „AuthorizeAttribute“ gali būti naudojamas gaunamų užklausų autorizavimui. Tu gali naudoti„AuthorizeAttribute“ patikrinti, ar vartotojas yra autentifikuotas. Jei vartotojas nėra autentifikuotas, jis grąžins HTTP būsenos kodą 401. Ši prieiga gali būti taikoma „Web API“ visame pasaulyje arba valdiklio lygiu.

Atminkite, kad taip pat galite įdiegti pasirinktinį pranešimų tvarkytuvą, kad būtų suteikta prieiga prie valdiklio metodų, nes pranešimų filtrai vykdomi daug anksčiau žiniatinklio API gyvavimo cikle.

Norėdami apriboti prieigą prie visų valdiklių, galite pridėti „AuthorizeAttribute“ visame pasaulyje Filtrai kolekcija „HttpConfiguration“ instancija. Šis kodo fragmentas rodo, kaip galite pridėti „AuthorizeAttribute“ į Filtrai kolekcija „HttpConfiguration“ objektas.

public static void Register („HttpConfiguration config“)

        {

// Žiniatinklio API konfigūracija ir paslaugos

// Žiniatinklio API maršrutai

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

pavadinimas: „DefaultApi“,

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

   numatytieji parametrai: new {id = RouteParameter.Optional}

            ); 

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

        } 

Naudojant atributą Įgalioti

Valdiklio lygiu galite apriboti prieigą taikydami Įgalioti atributas, kaip parodyta toliau pateiktame kodo fragmente.

[Įgalioti]

viešosios klasės „EmployeesController“: „ApiController“

{

// Čia parašykite metodus, kurie atitinka Http veiksmažodžius

}

Taip pat galite pritaikyti Įgalioti atributas veiksmo lygiu, kad apribotų prieigą prie konkretaus veiksmo metodo. Šis kodo fragmentas parodo, kaip tai galima įgyvendinti.

viešosios klasės „EmployeesController“: „ApiController“

{

public HttpResponseMessage Get () {// Kai kurie kodai}

// Reikalauti leidimo atlikti konkretų veiksmą.

[Įgalioti]

viešasis „HttpResponseMessage Post“ (darbuotojo įgaliojimas) {// tam tikras kodas}

Anksčiau parodytame kodo fragmente pasiekite Skelbti () metodas yra ribojamas, o prieiga prie Gauti () metodas nėra ribojamas. Taip pat galite apriboti valdiklį ir tada suteikti anoniminę prieigą prie vieno ar daugiau veiksmų metodų. Toliau pateiktas kodo fragmentas tai iliustruoja.

viešosios klasės „EmployeesController“: „ApiController“

{

public HttpResponseMessage Get () {// Kodas kodas}

[AllowAnonymous]

viešasis „HttpResponseMessage Post“ (darbuotojo įgaliojimas) {// tam tikras kodas}

}

Įgalioti veiksmus pagal vaidmenis ir vartotojus

Taip pat galima apriboti vaidmenų ir vartotojų prieigą prie veiksmų metodų. Šis kodo fragmentas parodo, kaip tai galima pasiekti.

[Įgalioti (vartotojai = "Joydip, Jini")] // Apriboti vartotojo prieigą

viešosios klasės „EmployeesController“: „ApiController“

{

// Čia parašykite metodus, kurie atitinka Http veiksmažodžius

}

Pirmiau pateiktame pavyzdyje darbuotojų valdiklis apriboja prieigą tik prie Joydipo ir Jini vartotojų. Žemiau pateiktas kodas parodo, kaip galite apriboti prieigą pagal vaidmenis.

[Autorizuoti (Roles = "Administratoriai")] // Apriboti pagal vaidmenis

viešosios klasės „EmployeesController“: „ApiController“

{

// Čia parašykite metodus, kurie atitinka Http veiksmažodžius

}

Visada galite pasiekti „ApiController“. Vartotojas valdiklio metodo ypatybė, norint gauti dabartinį principą ir suteikti įgaliojimą pagal vartotojo vaidmenį. Tai parodyta žemiau esančiame kodų sąraše.

public HttpResponseMessage Get ()

{

jei (User.IsInRole („Administratoriai“))

    {

// Čia parašykite savo kodą

    }

}

Pasirinktinių prieigos teisių filtrų naudojimas ASP.Net žiniatinklio API

Prieigos filtras yra klasė, pratęsianti „AuthorizationFilterAttribute“ klasę ir nepaiso OnAuthorization () metodas. Tai būdas, kuriuo galite parašyti autorizacijos logiką. Jei autorizacija nepavyksta, galite grąžinti Neautorizuota išimtis klasė ar net paprotys „HttpResponseMessage“.

Šis kodų sąrašas parodo, kaip galite įdiegti pasirinktinę klasę, leidžiančią patvirtinti užklausas savo žiniatinklio API. Atminkite, kad turėtumėte pratęsti „AuthorizeAttribute“ klasę, kad įdiegtumėte savo autorizacijos filtro klasę.

viešoji klasė „CustomAuthorizeAttribute“: „AuthorizeAttribute“

    {

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

        {

jei (AuthorizeRequest (actionContext))

            {

grįžti;

            }

„HandleUnauthorisedRequest“ (actionContext);

        }

apsaugotas nepaisymas negaliojantis „HandleUnauthorizedRequest“ (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Kodas tvarkyti neteisėtą užklausą

        }

privatus failas „AuthorizeRequest“ (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Parašykite savo kodą čia, kad galėtumėte atlikti prieigos teisę

grįžti tiesa;

        }

    }