Come proteggere un'API REST con Lumen

Lumen è il fratellino di Laravel: un micro-framework veloce e leggero per scrivere API RESTful. Con solo un po 'di codice, puoi usare Lumen per creare un'API RESTful sicura ed estremamente veloce.

In questo video tutorial del mio corso, Creare un'API REST Con Lumen, imparerai come utilizzare il middleware di autenticazione incorporato di Lumen per proteggere un'API REST con Lumen.

Il video fa riferimento al codice di un'API del negozio di musica di esempio che abbiamo creato nelle precedenti lezioni del corso. È possibile visualizzare il codice sorgente completo dal corso su GitHub.

Come proteggere un'API REST con Lumen

 

Autenticazione in Lumen

La sicurezza è una parte molto importante non solo di una web API ma di un'applicazione. E sfortunatamente, implementare l'autenticazione può essere una cosa difficile. Fortunatamente, l'autenticazione è incorporata in Lumen, quindi tutto ciò che dobbiamo fare è abilitare l'autenticazione e quindi scrivere alcune righe di codice per autenticare un utente e quindi qualche altra riga di codice per proteggere le cose che vogliamo proteggere.

Nel nostro esempio, vogliamo proteggere tre metodi sul nostro controller per chitarra. Sono i metodi di creazione, aggiornamento ed eliminazione. Queste sono cose a cui solo un utente autenticato dovrebbe avere accesso. 

Quindi iniziamo andando alla cartella bootstrap e aprendo app.php. 

Ci sono due dichiarazioni che abbiamo bisogno di decommentare. Il primo è la chiamata a routeMiddleware, che sta configurando il middleware di autenticazione. Vogliamo anche registrare il fornitore di servizi di autenticazione. Quindi la seconda affermazione è $ App-> register (App \ Providers \ AuthServiceProvider :: classe);. Semplicemente disattendendo queste due affermazioni, ora possiamo usare l'autenticazione nella nostra applicazione.

Ora vogliamo prendere nota del nostro middleware di autenticazione. Quindi andiamo a App \ Http \ Middleware \ authenticate.php, e all'interno di questa classe c'è un metodo chiamato maniglia, e questo metodo verrà eseguito prima dei nostri metodi protetti. 

Quindi, ogni volta che facciamo una richiesta per i nostri metodi di creazione, aggiornamento o cancellazione, verrà utilizzato il middleware di autenticazione, e questo maniglia il metodo sarà chiamato.

Se l'utente non è autenticato, restituirà un 401. In caso contrario, passerà la richiesta alla prossima cosa che elaborerà quella richiesta. 

Quindi questa è una cosa che dovevamo guardare. L'altro è all'interno della cartella Provider, ed è AuthServiceProvider.php.

Ora in fondo a questo file c'è un metodo chiamato avvio, e all'interno di boot c'è una chiamata a questo viaRequest metodo. E questo è il metodo che è responsabile dell'autenticazione effettiva dell'utente. Quindi questo dipenderà dalla nostra implementazione. E in questa lezione, la nostra implementazione sarà molto semplice.

Quello che faremo è controllare un'intestazione chiamata Api-Token. E se è un certo valore, diremo che l'utente è autenticato. Per dire che un utente è autenticato, dobbiamo restituire un'istanza utente. Se restituiamo null, significa che l'utente non è autenticato.

Quindi andiamo avanti e scriviamo quel codice. Ho intenzione di commentare questo codice esistente. E la prima cosa che faremo è recuperare l'intestazione Api-Token. Quindi useremo la nostra richiesta, chiameremo il metodo header e vogliamo Api-Token. 

$ header = $ request-> header ('Api-Token');

Ora, lasciatemi dire innanzitutto che non è sicuro. Vorremmo sicuramente memorizzare i nostri utenti in un database. Dovrebbero ognuno avere i propri token unici e in realtà dovremmo lavorare con chiavi private e pubbliche. Ma ho intenzione di lasciare a te tutti i dettagli di implementazione. Quello che vogliamo vedere è il modo in cui il middleware di autenticazione si collega alla nostra applicazione in modo che possiamo farlo funzionare, e quindi è possibile implementare qualsiasi cosa si voglia implementare.

Quindi recupereremo l'intestazione denominata Api-Token. E prima controlliamo per vedere se abbiamo qualcosa lì. 

Ora, l'unica altra cosa che dobbiamo fare è dire dove vogliamo usare il nostro middleware di autenticazione. Possiamo farlo in vari posti.

Il primo è ogni volta che definiamo i nostri percorsi. Ad esempio, vogliamo proteggere la nostra richiesta di posta. Quindi, invece di scrivere il nostro percorso come abbiamo fatto, potremmo farlo. È essenzialmente la stessa cosa, ma il secondo argomento che abbiamo passato al metodo post avrà due chiavi e valori.

Quindi, senza andare oltre, potremmo passare a Fiddler e possiamo fare una richiesta di post e potremmo vedere se questo sarebbe protetto.

Ora una delle grandi cose di Fiddler è che tiene traccia di tutte le richieste che abbiamo fatto. Quindi abbiamo solo bisogno di trovare dove abbiamo fatto una richiesta POST. E se proviamo a farlo, otterremo un 401. Ma se includiamo l'intestazione Api-Token e se lo impostiamo su "birds fly south", allora ogni volta che faremo questa richiesta otterremo un 200, e sappiamo già che i dati sono ora nel database.

Questa è la prima opzione. Ma la seconda opzione è specificare il nostro middleware all'interno del costruttore del nostro controller. Quindi commentiamo il codice che abbiamo appena scritto e invece usiamo il nostro vecchio percorso. 

Andiamo al nostro controller per chitarra e aggiungiamo il seguente codice:

Quindi, se torniamo a Fiddler e se emettiamo la stessa richiesta, cambiamo il valore in uno strat e il make in Fender, allora vedremo che funziona ancora. Quindi, quando eseguiamo quella richiesta, otteniamo un 200. Se togliamo l'Api-Token, allora otteniamo un 401. 

Ora pubblichiamo anche alcune delle altre richieste. Facciamo quindi una richiesta GET in modo che possiamo recuperare quelle chitarre e ottenere i loro ID. Liberiamoci dal token Api solo per vedere che funziona senza alcun tipo di autenticazione. E otteniamo l'ID di 1 e l'ID di 2. 

Quindi, se torniamo al compositore, facciamo una richiesta PUT per la chitarra con ID di 2.

Per i dati che invieremo, la marca sarà Fender, ma cambiamo il modello da strat a telecaster. Ora senza il token Api, questo non dovrebbe funzionare. Quindi ogni volta che eseguiamo, otteniamo un 401. Ma aggiungiamo l'Api-Token e poi il valore, gli uccelli volano a sud, e quella richiesta sta per tornare 200. 

Quindi, per completezza, facciamo una richiesta DELETE. Eliminiamo la chitarra con un ID di 1. Dovremmo ottenere 200 e riemettere la richiesta per recuperare tutte le nostre chitarre. E dovremmo averne uno, e dovrebbe avere un ID di 2. La marca è Fender, e il modello è telecaster. 

Quindi aggiungere l'autenticazione a un'applicazione Lumen è molto, molto semplice. Oltre ad aggiungere il middleware, la maggior parte del codice che devi scrivere è all'interno del AuthServiceProvider classe. Devi scrivere il codice responsabile per l'autenticazione dell'utente, ma una volta fatto, hai un'API sicura.

Guarda il corso completo

Nel corso completo, Crea un'API REST con Lumen, ti mostrerò come iniziare a costruire API REST con il framework Lumen. Inizierai impostando un ambiente di sviluppo Lumen e svilupperai un'API completa per un negozio di musica, incluso il routing, la connettività del database MySQL e la sicurezza.