Programmering

Hvordan sikre ASP.Net Web APIer ved hjelp av autorisasjonsfiltre

Sikkerhet er en stor bekymring i nettbaserte applikasjoner. Når du trenger å overføre data over ledningen, bør du være oppmerksom på de forskjellige verktøyene du kan bruke for å sikre dataene.

ASP.Net Web API er et lett rammeverk som brukes til å bygge statsløse RESTful-tjenester som kjører på HTTP. En måte å sikre Web API-tjenester er med autorisasjonsfiltre.

Ideelt sett bør du utføre godkjenning og autorisasjon tidlig i Web API-rørledningen. Dette bidrar til å eliminere unødvendig prosesseringskostnad fra forespørselssyklusen. Vær oppmerksom på at, enten du bruker HTTP-moduler eller HTTP-meldingshåndterere for autentisering, kan du hente gjeldende rektor (dvs. brukeren) fra ApiController.User eiendom.

Husk også at autorisasjonsfiltre for Web API kjøres før kontrollerens handlingsmetoder. Så hvis den innkommende forespørselen ikke er autorisert, vil en feil bli returnert fra tjenesten, forespørselen vil bli ignorert, og handlingsmetoden for tjenesten vil ikke bli utført.

Bruke AuthorizeAttribute-autorisasjonsfilteret

Det innebygde autorisasjonsfilteret AuthorizeAttribute kan brukes til å autorisere innkommende forespørsler. Du kan brukeAuthorizeAttribute for å sjekke om brukeren er autentisert. Hvis brukeren ikke er autentisert, vil den returnere HTTP-statuskoden 401. Denne autorisasjonen kan brukes i Web API globalt eller på kontrollernivå.

Merk at du også kan implementere en tilpasset meldingsbehandler for å gi tilgang til kontrollermetodene dine, ettersom meldingsfiltre kjøres mye tidligere i Web API-livssyklusen.

For å begrense tilgangen til alle kontrollere, kan du legge til AuthorizeAttribute globalt til Filtre samling av HttpConfiguration forekomst. Følgende kodebit viser hvordan du kan legge til AuthorizeAttribute til Filtre samling av HttpConfiguration gjenstand.

public static void Register (HttpConfiguration config)

        {

// Web API konfigurasjon og tjenester

// Web API-ruter

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

navn: “DefaultApi”,

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

   standardinnstillinger: ny {id = RouteParameter.Optional}

            ); 

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

        } 

Bruke autorisasjonsattributtet

På kontrollernivå kan du begrense tilgangen ved å bruke Autorisere attributtet som vist i kodebiten gitt neste.

[Autorisere]

offentlig klasse StaffController: ApiController

{

// Skriv metoder her som tilsvarer Http-verbene

}

Du kan også bruke Autorisere attributt på handlingsnivå for å begrense tilgangen til en bestemt handlingsmetode. Følgende kodebit illustrerer hvordan dette kan implementeres.

offentlig klasse StaffController: ApiController

{

offentlig HttpResponseMessage Get () {// Noe kode}

// Krev autorisasjon for en bestemt handling.

[Autorisere]

public HttpResponseMessage Post (Employee emp) {// Noe kode}

I kodebiten vist tidligere, får du tilgang til Post() metoden er begrenset mens tilgang til Få() metoden er ikke begrenset. Du kan også begrense kontrolleren og deretter gi anonym tilgang til en eller flere handlingsmetoder. Kodebiten som følger illustrerer dette.

offentlig klasse StaffController: ApiController

{

offentlig HttpResponseMessage Get () {// Noe kode}

[AllowAnonymous]

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

}

Autoriser handlinger av roller og brukere

Det er også mulig å begrense tilgangen til handlingsmetoder fra roller og brukere. Følgende kodebit viser hvordan dette kan oppnås.

[Autoriser (Brukere = "Joydip, Jini")] // Begrens tilgangen til brukeren

offentlig klasse StaffController: ApiController

{

// Skriv metoder her som tilsvarer Http-verbene

}

I eksemplet ovenfor begrenser ansatte-kontrolleren bare tilgangen til brukerne Joydip og Jini. Koden nedenfor viser hvordan du kan begrense tilgangen etter roller.

[Autoriser (Roller = "Administratorer")] // Begrens etter roller

offentlig klasse StaffController: ApiController

{

// Skriv metoder her som tilsvarer Http-verbene

}

Du kan alltid få tilgang til ApiController.User eiendom inne i kontroller-metoden for å hente gjeldende prinsipp og gi autorisasjon basert på brukerens rolle. Dette vises i kodelisten nedenfor.

offentlig HttpResponseMessage Get ()

{

hvis (User.IsInRole (“Administratorer”))

    {

// Skriv koden din her

    }

}

Bruke tilpassede autorisasjonsfiltre i ASP.Net Web API

Et autorisasjonsfilter er en klasse som utvider AuthorizationFilterAttribute klasse og overstyrer OnAuthorization () metode. Dette er metoden der du kan skrive autorisasjonslogikken. Hvis autorisasjonen mislykkes, kan du returnere en forekomst av Uautorisert unntak klasse eller til og med en skikk HttpResponseMessage.

Følgende kodeliste viser hvordan du kan implementere en tilpasset klasse for autorisering av forespørsler til web-API-et. Merk at du bør utvide AuthorizeAttribute klasse for å implementere din egen autorisasjonsfilterklasse.

offentlig klasse CustomAuthorizeAttribute: AuthorizeAttribute

    {

offentlig overstyring ugyldig OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

hvis (AuthorizeRequest (actionContext))

            {

komme tilbake;

            }

HandleUnauthorizedRequest (actionContext);

        }

beskyttet overstyring ugyldig HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Kode for å håndtere uautorisert forespørsel

        }

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

        {

// Skriv koden din her for å utføre autorisasjon

returner sant;

        }

    }

$config[zx-auto] not found$config[zx-overlay] not found