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