Kako osigurati ASP.Net web API-je pomoću autorizacijskih filtara

Sigurnost je glavna briga u internetskim poduzećima. Kada trebate podatke prenositi putem žice, trebali biste biti svjesni različitih alata pomoću kojih možete osigurati te podatke.

ASP.Net Web API lagan je okvir koji se koristi za izgradnju RESTful usluga bez državljanstva koje se izvode na HTTP-u. Jedan od načina osiguranja usluga web API-ja je filtri za autorizaciju.

U idealnom slučaju, trebali biste izvršiti provjeru autentičnosti i autorizaciju rano u cijevi web API-ja. To pomaže u uklanjanju nepotrebnih općih troškova obrade iz ciklusa zahtjeva. Imajte na umu da, bez obzira koristite li HTTP module ili HTTP obrađivače poruka za provjeru autentičnosti, možete dohvatiti trenutnog principala (tj. Korisnika) iz ApiController.Usersvojstva.

Također imajte na umu da se autorizacijski filtri Web API-ja izvršavaju prije metoda radnje kontrolera. Dakle, ako dolazni zahtjev nije autoriziran, usluzi će se vratiti pogreška, zahtjev će se zanemariti, a način rada usluge neće se izvršiti.

Korištenje autorizacijskog filtra AuthorizeAttribute

Ugrađeni autorizacijski filtar AuthorizeAttributemože se koristiti za autorizaciju dolaznih zahtjeva. Pomoću njega možete  AuthorizeAttribute provjeriti je li korisnik autentificiran. Ako korisnik nije ovjeren, vratit će HTTP statusni kod 401. Ova se autorizacija može primijeniti u web API-ju globalno ili na razini kontrolera.

Imajte na umu da također možete implementirati prilagođeni rukovatelj porukama kako biste autorizirali pristup vašim metodama kontrolera jer se filtri poruka izvršavaju mnogo ranije u životnom ciklusu Web API-ja.

Da biste ograničili pristup svim kontrolerima, zbirku instance možete dodati AuthorizeAttributeglobalno . Sljedeći isječak koda koji pokazuje kako možete dodati na zbirke objekta.FiltersHttpConfigurationAuthorizeAttributeFiltersHttpConfiguration

public static void Register(HttpConfiguration config)

        {

            // Web API configuration and services 

            // Web API routes

            config.MapHttpAttributeRoutes(); 

            config.Routes.MapHttpRoute(

                name: “DefaultApi”,

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

                defaults: new { id = RouteParameter.Optional }

            ); 

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

        } 

Upotreba atributa Autoriziraj 

Na razini kontrolera možete ograničiti pristup primjenom Authorizeatributa kao što je prikazano u sljedećem isječku koda.

[Authorize]

public class EmployeesController : ApiController

{

    //Write methods here that correspond to the Http verbs

}

AuthorizeAtribut također možete primijeniti na razini radnje kako biste ograničili pristup određenoj metodi radnje. Sljedeći isječak koda ilustrira kako se to može implementirati.

public class EmployeesController : ApiController

{

    public HttpResponseMessage Get() { //Some code }

   // Require authorization for a specific action.

    [Authorize]

    public HttpResponseMessage Post(Employee emp) { //Some code }

U isječku koda prikazanom ranije, pristup Post()metodi je ograničen, dok pristup Get()metodi nije ograničen. Također možete ograničiti kontroler, a zatim pružiti anonimni pristup jednoj ili više metoda radnje. Isječak koda koji slijedi to ilustrira.

public class EmployeesController : ApiController

{

    public HttpResponseMessage Get() { //Some code }

    [AllowAnonymous]

    public HttpResponseMessage Post(Employee emp) { //Some code }

}

Odobri radnje po ulogama i korisnicima

Također je moguće ograničiti pristup akcijskim metodama po ulogama i korisnicima. Sljedeći isječak koda pokazuje kako se to može postići.

[Authorize(Users="Joydip,Jini")] //Restrict access by user

public class EmployeesController : ApiController

{

   //Write methods here that correspond to the Http verbs

}

U gornjem primjeru kontroler Employees ograničava pristup samo korisnicima Joydip i Jini. Kôd u nastavku pokazuje kako možete ograničiti pristup ulogama.

[Authorize(Roles="Administrators")] //Restrict by roles

public class EmployeesController : ApiController

{

    //Write methods here that correspond to the Http verbs

}

Uvijek možete pristupiti ApiController.Usersvojstvu unutar metode kontrolera da biste dohvatili trenutačni princip i dodijelili autorizaciju na temelju korisničke uloge. To je prikazano u donjem popisu kodova.

public HttpResponseMessage Get()

{

    if (User.IsInRole(“Administrators”))

    {

        //Write your code here

    }

}

Korištenje prilagođenih autorizacijskih filtara u ASP.Net Web API-ju

Autorizacijski filtar je klasa koja proširuje AuthorizationFilterAttributeklasu i nadjačava OnAuthorization()metodu. Ovo je metoda na kojoj možete napisati logiku autorizacije. Ako autorizacija ne uspije, možete vratiti instancu UnauthorizedExceptionklase ili čak običaj HttpResponseMessage.

Sljedeći popis koda pokazuje kako možete implementirati prilagođenu klasu za autorizaciju zahtjeva za vaš web API. Imajte na umu da biste trebali proširiti AuthorizeAttributeklasu kako biste implementirali vlastitu klasu filtra za autorizaciju.

public class CustomAuthorizeAttribute : AuthorizeAttribute

    {

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

        {

            if (AuthorizeRequest(actionContext))

            {

                return;

            }

            HandleUnauthorizedRequest(actionContext);

        }

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

        {

           //Code to handle unauthorized request

        }

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

        {

            //Write your code here to perform authorization

            return true;

        }

    }