Mit der Beliebtheit von RESTful APIs und der weiten Verbreitung von Anwendungen erfordern immer mehr Anwendungen eine Authentifizierung und Autorisierung von APIs, sodass API-Sicherheit zu einem äußerst wichtigen Aspekt in der heutigen Softwareentwicklung geworden ist. Laravel Sanctum ist ein leichtgewichtiges Authentifizierungssystem, das mit Laravel 7.0 standardmäßig eingeführt wurde und darauf ausgelegt ist, die API-Authentifizierung einfach und sicher zu machen. In diesem Artikel stellen wir vor, wie man Sanctum in Laravel verwendet, um die API-Sicherheit zu gewährleisten.
Bevor wir beginnen, müssen wir bestätigen, dass Laravel 7.0+ Version installiert wurde. Dann können wir Composer verwenden, um Laravel Sanctum-Abhängigkeiten zu installieren:
composer require laravel/sanctum
Nach der Installation von Sanctum fügen Sie den folgenden Code zur Datei config/app.php
hinzu: 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();
personal_access_tokens
-Datenbanktabelle bereit, die die folgenden Felder enthält: 🎜id
: die eindeutige Kennung des Tokens 🎜🎜tokenable_type code >: Der Klassenname des Modells, das dem Token zugeordnet ist 🎜🎜<code>tokenable_id
: Die ID des Modells, das dem Token zugeordnet ist 🎜🎜name
: Der Name des Tokens 🎜 🎜token
: Der Wert des API-Tokens 🎜🎜abilities
: Die Autorisierung des Tokens🎜
personal_access_tokens
, müssen wir die erste Modellbeziehung erstellen. Dies kann durch die Registrierung des Folgenden in AuthServiceProvider
erfolgen: 🎜rrreee🎜Sanctum::ignoreMigrations()
wird verwendet, um Laravel in der artisan migrate
zu verhindern Befehl: Führen Sie die Datenbankmigrationsdatei von Sanctum aus. In den meisten Fällen fügen wir es jedoch einfach dem Befehl der Datenbankmigrationsdatei hinzu. Sanctum::actingAs()
bietet außerdem eine reine Entwicklungsmethode, die ohne Benutzerauthentifizierung die Identität eines Benutzers annimmt. 🎜🎜Dann müssen wir den folgenden Befehl ausführen, um die Tabelle personal_access_tokens
zu erstellen: 🎜rrreeeCreateToken
, die ein oder mehrere API-Tokens mit optionalen Namen und gewährten Berechtigungen erstellt. Hier stellen wir die zweite Methode vor, die darin besteht, die Funktion hasApiTokens()
in Verbindung mit der Funktion createToken()
zu verwenden: 🎜rrreee🎜Hier verwenden wir HasApiTokensTrait, um die API-Token-Funktionalität im Benutzermodell zu implementieren. Wir verwenden die Methode <code>createToken
, um ein API-Token zu erstellen und geben beim Erstellen des Tokens einen optionalen Namen und einen autorisierten Berechtigungsschlüssel an. 🎜sanctum
-Middleware in der Routing-Datei von Laravel verwenden, um die API-Route zu sichern, um das Token in der Anfrage zu überprüfen: 🎜rrreee🎜 In diesem Code definieren wir eine Validierungs--Routinggruppe für sanctum
Middleware. Eine Routengruppe enthält eine Route, für deren Zugriff lediglich ein gültiges Token erforderlich ist. 🎜Bearer
-Tokens ist die gebräuchlichste Methode zum Senden von API-Tokens über den HTTP-Header Authorization
. Sie können das Token autorisieren, indem Sie Authorization: Bearer {{$personalAccessToken->plainTextToken}}
zum Anforderungsheader hinzufügen: 🎜rrreeetokens()->delete()
verwenden, um alle API-Tokens für einen Benutzer zu löschen, oder die Funktion revoke()
verwenden, um ein einzelnes API-Token zu widerrufen :🎜rrreee🎜Fazit🎜🎜Jetzt haben wir die Sanctum-Authentifizierung erfolgreich implementiert, um unsere API zu schützen. Sanctum und Laravel bieten eine einfache, aber leistungsstarke API-Authentifizierung, die es Entwicklern ermöglicht, sich auf die Entwicklung leistungsstarker APIs zu konzentrieren und den Schwerpunkt auf die Geschäftslogik zu legen. Wenn Sie Sanctum verwenden, wird dringend empfohlen, die offizielle Dokumentation sorgfältig zu lesen, damit Sie den Authentifizierungsprozess der API vollständig verstehen und die höchste Sicherheit für Ihre Anwendung gewährleisten können. 🎜Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie implementiert man die API-Authentifizierung mit Laravel Sanctum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!