Comment sécuriser une API REST avec Lumen

Lumen est le petit frère de Laravel: un micro-framework rapide et léger pour l'écriture d'API RESTful. Avec juste un peu de code, vous pouvez utiliser Lumen pour créer une API RESTful sécurisée et extrêmement rapide..

Dans ce didacticiel vidéo de mon cours, Créer une API REST avec Lumen, vous apprendrez à utiliser le middleware d'authentification intégré de Lumen pour sécuriser une API REST avec Lumen..

La vidéo fait référence au code d'un exemple d'API de magasin de musique que nous avons créé dans les leçons précédentes du cours. Vous pouvez voir le code source complet du cours sur GitHub.

Comment sécuriser une API REST avec Lumen

 

Authentification en lumen

La sécurité est une partie très importante non seulement d'une API Web, mais également d'une application. Et malheureusement, la mise en œuvre de l'authentification peut être une chose difficile. Mais heureusement, l’authentification est intégrée à Lumen, de sorte que tout ce dont nous avons besoin est d’activer l’authentification, puis écrire quelques lignes de code pour authentifier un utilisateur, puis quelques lignes de code supplémentaires pour protéger les éléments que nous souhaitons protéger..

Dans notre exemple, nous souhaitons protéger trois méthodes sur notre contrôleur de guitare. Ce sont les méthodes create, update et delete. Ce sont des choses auxquelles seul un utilisateur authentifié devrait avoir accès.. 

Commençons donc par aller dans le dossier bootstrap et en ouvrant app.php. 

Nous devons dégager deux déclarations. Le premier est l'appel à routeMiddleware, qui met en place le middleware d'authentification. Nous souhaitons également enregistrer le fournisseur de services d'authentification. Donc, la deuxième déclaration est $ app-> register (App \ Providers \ AuthServiceProvider :: class);. En supprimant la mise en commentaire de ces deux déclarations, nous pouvons maintenant utiliser l'authentification dans notre application..

Nous voulons maintenant noter notre middleware d’authentification. Alors allons à App \ Http \ Middleware \ Authenticate.php, et à l'intérieur de cette classe il y a une méthode appelée manipuler, et cette méthode s'exécutera avant nos méthodes protégées. 

Donc, chaque fois que nous faisons une demande pour nos méthodes de création, de mise à jour ou de suppression, le middleware d’authentification va être utilisé, et cela manipuler la méthode va s'appeler.

Si l'utilisateur n'est pas authentifié, il retournera un 401. Sinon, il transmettra la demande à l'élément suivant qui traitera cette demande.. 

C'est donc une chose sur laquelle nous devions nous pencher. L'autre est à l'intérieur du dossier Fournisseurs, et c'est AuthServiceProvider.php.

Maintenant au bas de ce fichier est une méthode appelée démarrage, et à l'intérieur du démarrage est un appel à cette viaRequest méthode. Et c’est la méthode responsable de l’authentification effective de l’utilisateur. Donc, cela dépendra de notre mise en œuvre. Et dans cette leçon, notre implémentation va être très simple.

Ce que nous allons faire, c'est rechercher un en-tête appelé Api-Token. Et si c'est une certaine valeur, nous dirons que l'utilisateur est authentifié. Pour dire qu'un utilisateur est authentifié, nous devons renvoyer une instance d'utilisateur. Si nous retournons null, cela signifie que l'utilisateur n'est pas authentifié.

Alors allons-y et écrivons ce code. Je vais commenter ce code existant. Et la première chose à faire est de récupérer l'en-tête Api-Token. Donc, nous allons utiliser notre demande, nous allons appeler la méthode d'en-tête, et nous voulons Api-Token. 

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

Maintenant, laissez-moi d’abord dire que ce n’est pas sûr. Nous voudrions certainement stocker nos utilisateurs dans une base de données. Ils devraient chacun avoir leurs propres jetons et nous devrions vraiment travailler avec des clés privées et publiques. Mais je vais vous laisser tous les détails de la mise en œuvre. Ce que nous voulons voir, c'est comment l'intergiciel d'authentification se connecte à notre application afin que nous puissions le faire fonctionner, et ensuite vous pouvez implémenter ce que vous voulez implémenter..

Nous allons donc récupérer l'en-tête appelé Api-Token. Et vérifions d’abord si nous avons quelque chose là-bas. 

Maintenant, la seule autre chose que nous devons faire est d’indiquer où nous voulons utiliser notre middleware d’authentification. Nous pouvons le faire dans une variété de lieux.

La première est chaque fois que nous définissons nos itinéraires. Par exemple, nous voulons protéger notre demande de publication. Ainsi, au lieu d’écrire notre itinéraire comme nous l’avons fait, nous pourrions le faire. C'est essentiellement la même chose, mais le deuxième argument que nous avons passé à la méthode post va avoir deux clés et deux valeurs.

Donc, sans aller plus loin, nous pourrions faire un saut chez Fiddler, faire une demande de publication et voir si cela serait protégé..

Maintenant, l’un des grands avantages de Fiddler est qu’il garde la trace de toutes les demandes que nous avons formulées. Nous devons donc simplement trouver où nous avons fait une demande POST. Et si nous essayons d'exécuter ceci, nous obtiendrons un 401. Mais si nous incluons cet en-tête Api-Token, et si nous définissons cela comme "oiseaux s'envolent vers le sud", chaque fois que nous ferons cette demande, nous aurons un 200, et nous savons déjà que ces données sont maintenant dans la base de données.

C'est donc la première option. Mais la deuxième option consiste à spécifier notre middleware dans le constructeur de notre contrôleur. Alors commentons le code que nous venons d'écrire et utilisons plutôt notre ancien chemin. 

Allons sur notre contrôleur de guitare et ajoutons le code suivant:

Donc, si nous retournons à Fiddler et si nous émettons la même demande - changeons simplement la valeur en strat et la marque en Fender - alors nous verrons que cela fonctionne toujours. Donc, lorsque nous exécutons cette demande, nous obtenons un 200. Si nous retirons l'API-Token, nous obtenons un 401. 

Maintenant, émettons également certaines des autres demandes. Faisons donc une requête GET afin de pouvoir récupérer ces guitares et obtenir leurs identifiants. Supprimons Api-Token pour que nous puissions voir que cela fonctionne sans aucun type d'authentification. Et nous obtenons l'ID de 1 et l'ID de 2. 

Donc, si nous revenons au compositeur, faisons une requête PUT pour la guitare avec un ID de 2.

Pour les données que nous allons envoyer, la marque sera Fender, mais passons du modèle strat à télécaster. Maintenant, sans Api-Token, cela ne devrait pas fonctionner. Donc, chaque fois que nous exécutons, nous obtenons un 401. Mais ajoutons l'API-Token et ensuite la valeur, les oiseaux volent vers le sud, et cette demande va retourner 200. 

Donc, par souci d'exhaustivité, faisons une requête DELETE. Supprimons la guitare avec un ID de 1. Nous devrions en obtenir 200 et réémettons la demande de récupération de toutes nos guitares. Et nous devrions en avoir juste un, et il devrait avoir un identifiant de 2. La marque est Fender, et le modèle est Telecaster. 

Il est donc très simple d'ajouter une authentification à une application Lumen. Outre l’ajout du middleware, l’essentiel du code que vous devez écrire se trouve à l’intérieur du AuthServiceProvider classe. Vous devez écrire le code responsable de l'authentification de l'utilisateur, mais une fois que c'est fait, vous avez une API sécurisée..

Regarder le cours complet

Dans le cours complet, Créer une API REST avec Lumen, je vais vous montrer comment commencer à créer des API REST avec le framework Lumen. Vous allez commencer par configurer un environnement de développement Lumen, puis construire une API complète pour un magasin de musique, y compris le routage, la connectivité à la base de données MySQL et la sécurité..