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.User
svojstva.
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 AuthorizeAttribute
mož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 AuthorizeAttribute
globalno . Sljedeći isječak koda koji pokazuje kako možete dodati na zbirke objekta.Filters
HttpConfiguration
AuthorizeAttribute
Filters
HttpConfiguration
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 Authorize
atributa kao što je prikazano u sljedećem isječku koda.
[Authorize]
public class EmployeesController : ApiController
{
//Write methods here that correspond to the Http verbs
}
Authorize
Atribut 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.User
svojstvu 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 AuthorizationFilterAttribute
klasu i nadjačava OnAuthorization()
metodu. Ovo je metoda na kojoj možete napisati logiku autorizacije. Ako autorizacija ne uspije, možete vratiti instancu UnauthorizedException
klase 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 AuthorizeAttribute
klasu 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;
}
}