2026年01月25日/ 浏览 11
在 Symfony 5.3 中,实现 JWT 认证与 API 访问控制是确保 API 应用程序安全可靠运行的关键。通过集成 JWT 认证,可以有效控制用户访问权限,防止恶意攻击。同时,结合 API 的访问控制功能,可以实现更细致的访问验证,确保只有授权用户才能访问特定 API 服务。本文将详细讲解如何在 Symfony 5.3 中实现 JWT 认证与 API 访问控制,帮助开发者轻松实现状态管理与身份验证。
JWT(JSON Web Token)是一种加密的 token,用于存储和传输身份信息。它由三部分组成:字段名、签名和超权限。在 PHP 中,可以使用 PHP 8.2+ 来实现 JWT 的签名和加密。
在 Symfony 中,我们可以通过 Token Obtained 和 Token Obtained Denied 来实现 JWT 的认证功能。Token Obtained 表示Token 已经被验证,可以访问对应的 API 服务;Token Obtained Denied 则表示Token 已被拒绝,无法访问对应的 API 服务。
在 Symfony 5.3 中,我们可以通过 App\Tokenizer 文件夹中的 token 部分来配置 JWT 模块。以下是基本步骤:
App\Tokenizer 文件夹,并在 token 文件夹下创建一个 Token 类。Token 类中定义 Token Obtained 和 Token Obtained Denied 实体。App\Tokenizer 文件夹的 get 方法中,定义 Token Obtained 和 Token Obtained Denied 实体的验证逻辑。App 文件夹的 App 类中,将 Token 类作为 TokenObtainedToken 类型。在 App 文件夹的 Authentication 文件夹中,可以设置 API 访问控制规则,限制只有授权用户才能访问特定 API 服务。
ApplicationRule 类,定义 API 的访问规则。ApplicationRule 中,定义 Token Obtained 和 Token Obtained Denied 实体的验证逻辑。ApplicationRule 作为 AuthenticationRule 类型添加到 App 中。在 App 文件夹的 Authentication 文件夹中,可以创建一个 Service 类,实现 API 的访问控制功能。
Service 类,继承 ApplicationRule 类。Service 中,实现 Token Obtained 和 Token Obtained Denied 实体的验证逻辑。MyService,并在 Service 中实现 API 的访问逻辑。以下是实现 Token Obtained 实体验证的示例代码:
php
<?php
namespace App\Tokenizer;
class TokenObainedToken extends TokenObtainedToken
{
public function __construct()
{
$this->token = token(‘token’);
}
public function verify()
{
if ($this->token->isTokenValid()) {
return true;
} else {
return false;
}
}
public function getToken()
{
return $this->token;
}
}
以下是实现 Token Obtained Denied 实体验证的示例代码:
php
<?php
namespace App\Tokenizer;
class TokenObainedDeniedToken extends TokenObtainedDeniedToken
{
public function __construct()
{
$this->token = token(‘token’);
}
public function verify()
{
if ($this->token->isTokenInvalid()) {
return true;
} else {
return false;
}
}
public function getToken()
{
return $this->token;
}
}
以下是实现 API 访问控制规则的示例代码:
php
<?php
namespace App\Authentication;
class ApplicationRule extends AuthenticationRule
{
public function __construct()
{
$this->service = service(‘service’);
}
public function verifyToken()
{
$token = $this->token->getToken();
if (!$token instanceof TokenObainedToken || !$token instanceof TokenObainedDeniedToken) {
return false;
}
if ($token instanceof TokenObainedToken) {
try {
$result = $this->service->execute('GET', '/api/my endpoint');
if (200 <= $result->getStatusCode()) {
return true;
}
return false;
} catch (Exception $e) {
return false;
}
} else {
try {
$result = $this->service->execute('POST', '/api/my endpoint');
if (200 <= $result->getStatusCode()) {
return true;
}
return false;
} catch (Exception $e) {
return false;
}
}
return false;
}
}
在 Symfony 5.3 中,实现 JWT 认证与 API 访问控制是确保 API 应用程序安全可靠运行的关键。通过配置 Token Obtained 和 Token Obtained Denied 实体,可以实现身份验证;同时,通过设置 API 访问控制规则,可以限制只有授权用户才能访问特定 API 服务。这些功能可以显著提升应用的可访问性和安全性。