在本文中,我将使用图表以易于理解的方式解释 API 令牌身份验证。
在粗略了解 API 令牌身份验证的工作原理后,我将通过基于代码的方式解释 API 令牌身份验证如何使用 Laravel Sanctum 进行工作。
通过阅读本文,您将了解以下内容
客户端将用户的登录信息(例如电子邮件、密码)发送到身份验证服务器。
认证服务器验证登录信息,检查用户是否存在、密码是否正确。
成功登录后,Auth 服务器会为用户生成一个 API 令牌。生成的API令牌存储在personal_access_tokens表中。
客户端向资源服务器发送 API 请求,并将生成的 API 令牌附加到授权标头。
资源服务器验证API令牌。如果 API 令牌有效,则处理请求。
资源服务器返回API响应。
sail php artisan install:api
该命令生成Laravel项目下API token认证所需的api.php文件和迁移文件。
然后,执行迁移:
sail artisan migrate
这将创建 individual_access_tokens 表。
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
api.php
Route::post('/register', [AuthController::class, 'register']);
AuthController.php
public function register(Request $request) { $fields = $request->validate([ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed' ]); $user = User::create($fields); $token = $user->createToken($request->name); return [ 'user' => $user, 'token' => $token->plainTextToken ]; }
api.php
*Route*::post('/login', [*AuthController*::class, 'login']);
AuthController.php
sail php artisan install:api
*注意:每次用户登录时都会生成一个新的 API 令牌。
使用 Postman,发送具有以下条件的 API 请求以检查响应。
成功登录后,会生成 API 令牌。
您可以检查personal_access_tokens表来确认登录用户的名称和API令牌是否已保存。
*注意:API响应中的令牌与personal_access_tokens表中的令牌不同,因为它在存储到数据库时经过哈希处理。
以下是与用户关联的帖子的 CRUD 过程的示例代码。
示例代码:PostController.php
使用 Laravel Sanctum 限制访问权限,以便只有登录的用户才能创建、编辑和删除与用户关联的帖子。
发送实际的 API 请求以验证 API 令牌身份验证是否正确执行。
还可以通过在路由文件中写入以下内容来限制对 apiResource 中设置的帖子的所有端点的访问。
api.php
sail php artisan install:api
sail artisan migrate
在这种情况下,我们只想为 PostController 中的存储、更新和删除操作设置 API 令牌身份验证。为此,请在 PostController 中创建一个构造函数方法,并将 auth:sanctum 中间件应用于除 index 和 show 之外的所有操作。
PostController.php
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
现在,用户在创建、更新或删除帖子时必须在请求中包含令牌。
测试此设置,如果您发送没有授权令牌的请求来创建帖子,则会返回带有“未经身份验证”消息的 401 错误,并且帖子创建失败。
如果包含授权令牌,则数据创建成功。
同样,更新和删除帖子的 API 要求发送请求时在 Authorization header 中包含 Token。
用户访问限制已通过 API 令牌身份验证实现。
不过,还是有问题。
在当前状态下,经过身份验证的用户可以更新或删除其他用户的帖子。
添加一个流程来验证用户是否拥有帖子的所有权。
在 Laravel 策略文件中编写授权逻辑,以便只有拥有帖子所有权的用户才能更新和删除帖子。
PostController.php
sail php artisan install:api
PostPolicy.php
sail artisan migrate
修改方法:
api.php
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
应用 auth::sanctum 中间件进行注销路由并设置 API Token 身份验证。
AuthController.php
Route::post('/register', [AuthController::class, 'register']);
服务器将从数据库中删除当前的 API 令牌。这会使令牌无效并且无法再次使用。
服务器向客户端返回响应,表示注销成功。
在本文中,使用图表以易于理解的方式解释了 API 令牌身份验证。
通过利用 Laravel Sanctum,可以使用 API 令牌实现简单且安全的身份验证,这允许客户端以不同于基于会话的身份验证的灵活性向单个用户授予访问权限。使用中间件和策略,还可以有效保护 API 请求、限制访问以及验证资源所有权。
以上是API令牌认证的详细内容。更多信息请关注PHP中文网其他相关文章!