Authentification d’application mobile à l’aide d’un jeton dans Laravel
Utilisez-vous Laravel pour le back-end de votre application mobile? Si oui, vous recherchez probablement une solution simple pour l’authentification de votre application mobile. De nombreux utilisateurs peuvent utiliser votre application mobile et vous souhaitez procéder à une authentification afin de fournir du contenu à vos utilisateurs mobiles. Dans cet article, nous étudions comment effectuer une authentification basée sur des jetons dans Laravel. Vous pouvez également utiliser la même approche pour l’authentification API REST.
Nous allons intégrer Laravel Sanctum qui est un système d’authentification léger. Vous pouvez le considérer comme un remplacement pour l’authentification basée sur OAuth.
Lors de l’utilisation de Sanctum, les jetons API de l’utilisateur sont stockés dans la base de données. Ce jeton doit être envoyé sous forme de Bearer
jeton via un en- Authorization
tête depuis votre application mobile vers les points de terminaison de l’API Laravel. Ces jetons ont généralement un délai d’expiration très long (années).
Cela étant dit, voyons comment utiliser Sanctum pour authentifier les applications mobiles.
Installer et configurer Laravel Sanctum
Pour commencer, vous devez d’abord installer un package Sanctum sur votre application Laravel. Installez-le à l’aide de la commande :
composer require laravel/sanctum
Après cela, publiez les fichiers de configuration et de migration de Sanctum en exécutant la commande ci-dessous.
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
Ensuite, exécutez la commande de migration qui créera une personal_access_tokens
table dans votre base de données. Il s’agit de la table où tous les jetons d’API seront stockés.
php artisan migrate
Par défaut, chaque requête dans Laravel nécessite un jeton csrf. En cas de manque de ce jeton csrf, Laravel ne donne pas suite à votre demande. Lorsqu’il s’agit de générer des jetons d’API à l’aide de Sanctum, nous devons ignorer l’envoi du jeton csrf. Pour cela, ajoutez sanctum/token
route à la $except
variable de app/Http/Middleware/VerifyCsrfToken.php
. Je vais créer cet sanctum/token
itinéraire dans les prochaines étapes.
<?php
...
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'sanctum/token'
];
}
À des fins d’authentification, nous devons émettre un jeton pour les utilisateurs. Ainsi, vous devez utiliser le HasApiTokens
trait pour le modèle User comme suit.
<?php
namespace AppModels;
...
use LaravelSanctumHasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
...
}
Émission de jetons d’API pour l’authentification
Afin d’envoyer un jeton Bearer avec l’en-tête Authorization dans chaque requête, il faut d’abord émettre un jeton API. Je vais créer une méthode qui génère un jeton API pour chaque utilisateur. Pour émettre un jeton, vous devrez envoyer l’e-mail, le mot de passe et l’appareil d’un utilisateur.
Ajoutez l’itinéraire ci-dessous dans le routes/web.php
Route::post('/sanctum/token', 'APITokenController@create_token');
Ensuite, créez un contrôleur APITokenController
par la commande :
php artisan make:controller APITokenController
Définissez la create_token()
méthode dans le contrôleur nouvellement créé comme suit.
<?php
namespace AppHttpControllers;
use AppModelsUser;
use IlluminateHttpRequest;
use IlluminateSupportFacadesHash;
use IlluminateValidationValidationException;
class APITokenController extends Controller
{
public function create_token(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required',
]);
$user = User::where('email', $request->input('email'))->first();
if (! $user ||! Hash::check($request->input('password'), $user->password)) {
return [
'error' => 'The provided credentials are incorrect.'
];
}
return $user->createToken($request->input('device_name'))->plainTextToken;
}
}
Le code ci-dessus vérifie d’abord les informations d’identification de l’utilisateur. Si les informations d’identification sont correctes, il envoie en réponse un jeton au format texte brut. Ici, je reçois des valeurs d’entrée étant donné qu’elles seront envoyées dans un objet JSON.
Essayez d’envoyer une requête POST avec les informations d’identification de l’utilisateur et vous devriez recevoir le jeton en texte brut. Ce jeton API peut être stocké sur l’appareil mobile et utilisé dans un en-tête lors de l’envoi de requêtes API.
Dans mon cas, j’utilise l’ extension Rest Client du code VS et ma demande sanctum/token
est comme indiqué dans la capture d’écran ci-dessous.
Rendez-vous dans la base de données et vous devriez voir que votre jeton est stocké dans la personal_access_tokens
table.
Sanctum créera plusieurs jetons chaque fois que vous emprunterez la sanctum/token
route avec les informations d’identification correctes. Si vous souhaitez révoquer le jeton précédent, ajoutez l’instruction ci-dessous avant la dernière instruction de retour du code ci-dessus.
// Revoke previous tokens...
$user->tokens()->delete();
return $user->createToken($request->input('device_name'))->plainTextToken;
Enfin, protégez les routes en ajoutant le auth:sanctum
middleware comme suit.
Route::middleware('auth:sanctum')->get('/products', function() {
// write a code
});
Le middleware valide si le jeton est reçu dans un en-tête d’autorisation. Si le jeton API est correct, alors seul il permet de poursuivre la route.
Par exemple, dans le code VS, vous pouvez envoyer le jeton API en tant que jeton Bearer avec l’en-tête d’autorisation, comme indiqué ci-dessous.
J’espère que vous comprenez comment intégrer l’authentification des applications mobiles à l’aide d’un jeton dans Laravel. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.
Articles Liés
- Comment créer un blog avec Laravel
- Un guide sur l’ajout de Google reCAPTCHA v3 à votre site Web Laravel
- Comment télécharger une vidéo sur YouTube dans l’application Laravel