Lumen är Laravels lilla bror: en snabb, lättmikro-ram för att skriva RESTful APIs. Med bara en liten bit av kod kan du använda Lumen för att skapa ett säkert och extremt snabbt RESTful API.
I den här videoprocessen från min kurs, Skapa ett REST API med Lumen, lär du dig hur du använder Lumen's inbyggda autentiserings middleware för att säkra ett REST API med Lumen.
Videon hänvisar till kod från ett program för samplingsmusikaffär som vi skapade i tidigare lektioner av kursen. Du kan se hela källkoden från kursen på GitHub.
Säkerhet är en mycket viktig del, inte bara för ett web-API utan för en applikation. Och tyvärr kan implementering av autentisering vara en svår sak. Men tack och lov är autentisering inbyggd i Lumen så att allt vi behöver göra är att aktivera autentisering och skriv sedan några rader kod för att autentisera en användare och sedan några fler rader kod för att skydda de saker som vi vill skydda.
I vårt exempel vill vi skydda tre metoder på vår gitarrkontroll. De är skapa, uppdatera och ta bort metoder. Det här är saker som endast en autentiserad användare ska ha tillgång till.
Så låt oss börja med att gå till bootstrap-mappen och öppna app.php.
Det finns två uttalanden som vi behöver inte kommentera. Den första är samtalet till routeMiddleware
, som konfigurerar middleware. Vi vill också registrera auktoriserad tjänsteleverantör. Så det andra uttalandet är $ App> registrera (App \ Providers \ AuthServiceProvider :: klass);
. Bara genom att inte kommentera dessa två uttalanden kan vi nu använda autentisering i vår ansökan.
Nu vill vi notera vår autentisering middleware. Så låt oss gå till App \ Http \ Middleware \ Authenticate.php
, och inuti denna klass finns en metod kallad hantera
, och denna metod kommer att utföras före våra skyddade metoder.
Så när som helst vi gör en förfrågan på våra skapar, uppdaterar eller tar bort metoder, kommer autentiseringsmedierprogrammet att användas, och detta hantera
Metoden kommer att kallas.
Om användaren inte är autentiserad kommer den att returnera en 401. Annars kommer den att vidarebefordra begäran till nästa sak som kommer att behandla den begäran.
Så det är en sak som vi behövde titta på. Den andra är inuti leverantörens mapp, och det är AuthServiceProvider.php.
Nu längst ner i den här filen heter en metod känga
, och inuti uppstart är ett samtal till detta viaRequest
metod. Och det här är den metod som ansvarar för att autentisera användaren. Så detta kommer att vara beroende av vår implementering. Och i den här lektionen blir vår implementering väldigt enkel.
Vad vi ska göra är att leta efter en rubrik som heter Api-Token. Och om det är ett visst värde så ska vi säga att användaren är autentiserad. För att kunna säga att en användare är autentiserad måste vi returnera en användarinstans. Om vi returnerar null betyder det att användaren inte är autentiserad.
Så låt oss gå vidare och skriva den koden. Jag ska kommentera den här befintliga koden. Och det första vi ska göra är att hämta Api-Token-rubriken. Så vi ska använda vår begäran, vi ska ringa rubrikmetoden, och vi vill ha Api-Token.
$ header = $ request-> header ('Api-Token');
Låt mig först och främst säga att detta inte är säkert. Vi skulle definitivt vilja lagra våra användare i en databas. De borde ha sina egna unika tokens och vi borde verkligen arbeta med privata och offentliga nycklar. Men jag ska lämna alla implementeringsdetaljer till dig. Vad vi vill se är hur autentisering mellanprogrammet pluggar in i vår applikation så att vi kan få det att fungera, och då kan du implementera vad som helst som du vill implementera.
Så vi ska hämta rubriken Api-Token. Och låt oss först och främst kontrollera om vi har något där.
Nu är det enda andra som vi behöver göra att säga var vi vill använda vår autentisering middleware. Vi kan göra det på en mängd olika ställen.
Den första är när vi definierar våra vägar. Vi vill till exempel skydda vår postförfrågan. Så istället för att skriva vår väg som vi gjorde kunde vi göra det här. Det är i huvudsak samma sak, men det andra argumentet som vi passerade till postmetoden kommer att ha två nycklar och värden.
Så utan att gå längre kunde vi hoppas över till Fiddler och vi kan göra en postförfrågan och vi kunde se om det skulle skyddas.
Nu är en av de fantastiska sakerna om Fiddler att den följer alla önskemål som vi har gjort. Så vi behöver bara hitta var vi gjorde en POST-förfrågan. Och om vi försöker att utföra detta kommer vi att få 401. Men om vi inkluderar den Api-Token-rubriken och om vi sätter det på "fåglar flyger söder", så när vi gör denna förfrågan får vi 200, och vi vet redan att uppgifterna nu finns i databasen.
Så det är det första alternativet. Men det andra alternativet är att ange vår middleware inuti vår controller konstruktör. Så låt oss kommentera koden som vi just skrev och istället använda vår gamla väg.
Låt oss gå till vår gitarrkontroll och lägga till följande kod:
Så om vi går tillbaka till Fiddler och om vi utfärdar samma förfrågan, låt oss bara ändra värdet till ett lager och göra till Fender-då kommer vi att se att det fortfarande fungerar. Så när vi utför den förfrågan får vi 200. Om vi tar ut Api-Token får vi 401.
Låt oss nu också utfärda några av de andra förfrågningarna. Så låt oss göra en GET-förfrågan så att vi kan hämta de gitarrerna och få deras ID-nummer. Låt oss bli av med Api-Token bara så att vi kan se att det fungerar utan någon typ av autentisering. Och vi får ID på 1 och ID på 2.
Så om vi går tillbaka till kompositören, låt oss göra en PUT-förfrågan på gitarr med ID på 2.
För de data som vi ska skicka kommer märket att bli Fender, men låt oss ändra modellen från ett strat till en telecaster. Nu utan Api-Token borde det inte fungera. Så när vi kör, får vi en 401. Men låt oss lägga till Api-Token och då värdet, flyger fåglar söderut, och den förfrågan kommer att återvända 200.
Så bara för fullständighetens skull, låt oss göra en DELETE-förfrågan. Låt oss ta bort gitarren med ett ID på 1. Vi borde få 200, och en låt oss återge begäran om att hämta alla våra gitarrer. Och vi borde bara ha en, och den borde ha ett ID på 2. Maken är Fender, och modellen är telecaster.
Så att lägga till autentisering till en Lumen-applikation är väldigt enkelt. Annat än att lägga till middleware, är huvuddelen av koden som du måste skriva inuti AuthServiceProvider
klass. Du måste skriva koden som är ansvarig för att autentisera användaren, men när det är klart har du ett säkert API.
I hela kursen, Skapa ett REST API med Lumen, visar jag hur du kommer igång med att bygga REST API med Lumen-ramen. Du börjar med att skapa en Lumen-utvecklingsmiljö och fortsätter att bygga ett komplett API för en musikaffär, inklusive routing, MySQL-databasanslutning och säkerhet.