Programmering

Sådan sikres ASP.Net Web API'er ved hjælp af autorisationsfiltre

Sikkerhed er en stor bekymring i webbaserede virksomhedsapplikationer. Når du har brug for at overføre data via ledningen, skal du være opmærksom på de forskellige værktøjer, du kan bruge til at sikre disse data.

ASP.Net Web API er en letvægtsramme, der bruges til at opbygge statsløse RESTful-tjenester, der kører på HTTP. En måde at sikre Web API-tjenester er med autorisationsfiltre.

Ideelt set skal du udføre godkendelse og godkendelse tidligt i Web API-pipelinen. Dette hjælper med at fjerne unødvendige behandlingsomkostninger fra anmodningscyklussen. Bemærk, at uanset om du bruger HTTP-moduler eller HTTP-meddelelsesbehandlere til godkendelse, kan du hente den aktuelle hovedstol (dvs. brugeren) fra ApiController.User ejendom.

Husk også på, at Web API-godkendelsesfiltre udføres før controllerens handlingsmetoder. Så hvis den indgående anmodning ikke er godkendt, returneres en fejl fra tjenesten, anmodningen ignoreres, og servicemetoden for tjenesten udføres ikke.

Brug af AuthorizeAttribute-godkendelsesfilteret

Det indbyggede autorisationsfilter AuthorizeAttribute kan bruges til at godkende indgående anmodninger. Du kan brugeAuthorizeAttribute for at kontrollere, om brugeren er godkendt. Hvis brugeren ikke er godkendt, returnerer den HTTP-statuskoden 401. Denne autorisation kan anvendes i Web API globalt eller på controller-niveau.

Bemærk, at du også kan implementere en brugerdefineret beskedhåndterer til at godkende adgang til dine controller-metoder, da meddelelsesfiltre udføres meget tidligere i Web API-livscyklussen.

For at begrænse adgangen til alle controllere kan du tilføje AuthorizeAttribute globalt til Filtre samling af HttpConfiguration eksempel. Følgende kodestykke viser, hvordan du kan tilføje AuthorizeAttribute til Filtre samling af HttpConfiguration objekt.

offentligt statisk ugyldigt register (HttpConfiguration config)

        {

// Web API konfiguration og tjenester

// Web API-ruter

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

navn: “StandardApi”,

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

   standardindstillinger: ny {id = RouteParameter.Optional}

            ); 

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

        } 

Brug af godkendelsesattributten

På controllerniveau kan du begrænse adgangen ved at anvende Bemyndige attribut som vist i kodeuddraget, der er angivet næste.

[Bemyndige]

offentlig klasse StaffController: ApiController

{

// Skriv metoder her, der svarer til Http-verbene

}

Du kan også anvende Bemyndige attribut på handlingsniveau for at begrænse adgangen til en bestemt handlingsmetode. Følgende kodestykke illustrerer, hvordan dette kan implementeres.

offentlig klasse StaffController: ApiController

{

offentlig HttpResponseMessage Get () {// Noget kode}

// Kræv tilladelse til en bestemt handling.

[Bemyndige]

offentlig HttpResponseMessage Post (medarbejder-emp) {// Noget kode}

I det tidligere viste kodestykke skal du have adgang til Stolpe() metoden er begrænset, mens adgangen til Få() metoden er ikke begrænset. Du kan også begrænse controlleren og derefter give anonym adgang til en eller flere handlingsmetoder. Kodestykket, der følger, illustrerer dette.

offentlig klasse StaffController: ApiController

{

offentlig HttpResponseMessage Get () {// Noget kode}

[AllowAnonymous]

offentlig HttpResponseMessage Post (medarbejder-emp) {// Noget kode}

}

Autoriser handlinger foretaget af roller og brugere

Det er også muligt at begrænse roller og brugeres adgang til handlingsmetoder. Følgende kodestykke viser, hvordan dette kan opnås.

[Autoriser (Brugere = "Joydip, Jini")] // Begræns brugerens adgang

offentlig klasse StaffController: ApiController

{

// Skriv metoder her, der svarer til Http-verbene

}

I ovenstående eksempel begrænser medarbejdercontrolleren kun adgang til brugerne Joydip og Jini. Koden nedenfor viser, hvordan du kan begrænse adgangen efter roller.

[Autoriser (Roller = "Administratorer")] // Begræns efter roller

offentlig klasse StaffController: ApiController

{

// Skriv metoder her, der svarer til Http-verbene

}

Du kan altid få adgang til ApiController.User ejendom inde i controller-metoden for at hente det nuværende princip og give autorisation baseret på brugerens rolle. Dette vises i nedenstående kodeliste.

offentlig HttpResponseMessage Get ()

{

hvis (User.IsInRole (“Administratorer”))

    {

// Skriv din kode her

    }

}

Brug af tilpassede godkendelsesfiltre i ASP.Net Web API

Et autorisationsfilter er en klasse, der udvider AuthorizationFilterAttribute klasse og tilsidesætter OnAuthorization () metode. Dette er metoden, hvor du kan skrive autorisationslogikken. Hvis godkendelsen mislykkes, kan du returnere en forekomst af UautorizedException klasse eller endda en brugerdefineret HttpResponseMessage.

Følgende kodeliste viser, hvordan du kan implementere en brugerdefineret klasse til godkendelse af anmodninger til din web-API. Bemærk, at du skal udvide AuthorizeAttribute klasse til at implementere din egen godkendelsesfilterklasse.

offentlig klasse CustomAuthorizeAttribute: AuthorizeAttribute

    {

offentlig tilsidesættelse ugyldig OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

hvis (AuthorizeRequest (actionContext))

            {

Vend tilbage;

            }

HandleUnauthorizedRequest (actionContext);

        }

beskyttet tilsidesættelse ugyldig HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Kode til håndtering af uautoriseret anmodning

        }

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

        {

// Skriv din kode her for at udføre autorisation

returner sandt;

        }

    }