Avec la popularité des API RESTful et l'utilisation généralisée des applications, de plus en plus d'applications nécessitent une authentification et une autorisation des API, la sécurité des API est donc devenue un aspect extrêmement important dans le développement logiciel actuel. Laravel Sanctum est un système d'authentification léger introduit directement avec Laravel 7.0, conçu pour rendre l'authentification API simple et sécurisée. Dans cet article, nous expliquerons comment utiliser Sanctum dans Laravel pour garantir la sécurité des API.
Avant de commencer, nous devons confirmer que la version Laravel 7.0+ a été installée. Ensuite, nous pouvons utiliser composer pour installer les dépendances de Laravel Sanctum :
composer require laravel/sanctum
Après avoir installé Sanctum, ajoutez le code suivant au fichier config/app.php
: config/app.php
文件中加入以下代码:
'providers' => [ // ... LaravelSanctumSanctumServiceProvider::class, ], 'aliases' => [ //... 'Sanctum' => LaravelSanctumSanctum::class, ]
这样,Laravel应用程序就已经使用了Sanctum提供的服务和功能。
接下来,在执行数据库迁移之前,我们需要设置Sanctum的数据库表。 Larave lSanctum默认提供了一个包含以下字段的personal_access_tokens
数据库表:
id
:令牌的唯一标识符tokenable_type
:与令牌关联的模型的类名tokenable_id
:与令牌关联的模型的IDname
:令牌的名称token
:API令牌的值abilities
:令牌的授权在创建personal_access_tokens
表之前,我们需要先创建模型关系。可以通过在AuthServiceProvider
中注册以下内容来完成:
use LaravelSanctumSanctum; //... public function boot() { $this->registerPolicies(); Sanctum::ignoreMigrations(); Sanctum::actingAs( null, [ 'superuser' ]); }
Sanctum::ignoreMigrations()
用于阻止Laravel在artisan migrate
命令中执行Sanctum的数据库迁移文件。但是,在大多数情况下,我们只是将其添加到数据库迁移文件的命令中。Sanctum::actingAs()
还提供了一种仅用于开发的方法,该方法在没有用户身份验证的情况下模拟用户身份。
然后,我们需要运行以下命令来创建personal_access_tokens
表:
php artisan migrate
Laravel Sanctum为我们提供了两种方式来为API生成令牌。一种是CreateToken
方法,该方法可以创建一个或多个包含可选名称和授予权限的API令牌。这里我们介绍第二种方法,即使用hasApiTokens()
函数配合createToken()
函数:
// use the HasApiTokens trait within your User Model use LaravelSanctumHasApiTokens; class User extends Authenticatable { use HasApiTokens, Notifiable; // ... } // create a Token with User ID and given Abilities $personalAccessToken = $user->createToken('API Token', ['server:get','server:post']);
这里我们在用户模型中使用了HasApiTokens
Trait,以便在用户模型中实现API令牌功能。我们使用createToken
方法来创建一个API令牌,并在创建令牌时指定了一个可选的名称和授权的权限键。
有了API密钥,我们就可以将其注入到每个请求中以进行身份验证。我们可以在Laravel的路由文件中使用sanctum
中间件来保护API路由,以便验证请求中的令牌:
// A Group of API routes that require a valid Token Route::group(['middleware' => 'auth:sanctum'], function () { Route::get('/user', function (Request $request) { return $request->user(); }); });
在这段代码中,我们定义了一个包含验证sanctum
中间件的路由组。 路由组中包含一条路由,该路由仅需要一个有效的Token才能访问。
使用Bearer
令牌是通过HTTP Authorization
头来发送API令牌的最常见方法。可以通过在请求头中加入Authorization: Bearer {{$personalAccessToken->plainTextToken}}
来授权令牌:
curl -H "Authorization: Bearer xxxxx" http://example.com/api/user
最后,我们需要了解如何撤销API令牌。我们可以使用tokens()->delete()
函数来删除某个用户的所有API令牌,或使用revoke()
$user->tokens()->delete(); $personalAccessToken->revoke();# 🎜 🎜#De cette manière, l'application Laravel a utilisé les services et fonctions fournis par Sanctum.
Configurer la base de données
Ensuite, avant d'effectuer la migration de la base de données, nous devons configurer la table de la base de données de Sanctum. LaravelSanctum fournit par défaut une table de base de donnéespersonal_access_tokens
qui contient les champs suivants : #🎜🎜#id
: L'identifiant unique du jeton #🎜🎜 ##🎜🎜#tokenable_type
: Le nom de classe du modèle associé au token #🎜🎜##🎜🎜#tokenable_id
: L'ID du modèle associé au token #🎜 🎜##🎜🎜#name
: Le nom du token #🎜🎜##🎜🎜#token
: La valeur du token API #🎜🎜## 🎜🎜#capacités : Autorisation de jeton #🎜🎜#personal_access_tokens
, nous devons d'abord créer la relation modèle. Cela peut être fait en enregistrant ce qui suit dans AuthServiceProvider
: #🎜🎜#rrreee#🎜🎜#Sanctum::ignoreMigrations()
est utilisé pour empêcher Laravel de migrer dans artisan
Exécutez le fichier de migration de la base de données de Sanctum dans la commande. Cependant, dans la plupart des cas, nous l'ajoutons simplement à la commande du fichier de migration de la base de données. Sanctum::actingAs()
fournit également une méthode de développement uniquement qui emprunte l'identité d'un utilisateur sans authentification de l'utilisateur. #🎜🎜##🎜🎜# Ensuite, nous devons exécuter la commande suivante pour créer la table personal_access_tokens
: #🎜🎜#rrreeeCreateToken
, qui crée un ou plusieurs jetons API avec des noms facultatifs et des autorisations accordées. Nous introduisons ici la deuxième méthode, qui consiste à utiliser la fonction hasApiTokens()
en conjonction avec la fonction createToken()
: #🎜🎜#rrreee#🎜🎜#Ici, nous utilisez-le dans le modèle utilisateur Le trait HasApiTokens
est ajouté pour implémenter la fonction de jeton API dans le modèle utilisateur. Nous utilisons la méthode createToken
pour créer un jeton API et spécifions un nom facultatif et une clé d'autorisation autorisée lors de la création du jeton. #🎜🎜#sanctum
dans le fichier de routage de Laravel pour protéger la route API afin de vérifier le token dans la requête : #🎜🎜#rrreee#🎜🎜#Dans ce code, nous définissons Un groupe de routage contenant le middleware de validation sanctum
. Un groupe de routes contient une route qui ne nécessite qu'un jeton valide pour y accéder. #🎜🎜#Bearer
via HTTP Autorisation
en-tête pour envoyer un jeton API. Vous pouvez autoriser le jeton en ajoutant Authorization: Bearer {{$personalAccessToken->plainTextToken}}
à l'en-tête de la requête : #🎜🎜#rrreeetokens()->delete()
pour supprimer tous les jetons API d'un utilisateur, ou utiliser la fonction revoke()
pour révoquer un seul jeton API. :#🎜🎜#rrreee#🎜🎜# Conclusion #🎜🎜##🎜🎜# Nous avons désormais implémenté avec succès l'authentification Sanctum pour protéger notre API. Sanctum et Laravel fournissent une authentification API simple mais puissante, qui permet aux développeurs de se concentrer sur la création d'API puissantes et de se concentrer principalement sur la logique métier. Lorsque vous utilisez Sanctum, il est fortement recommandé de lire attentivement la documentation officielle afin de bien comprendre le processus d'authentification de l'API et d'assurer la plus haute sécurité pour votre application. #🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!