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;
}
}