为 yii2.0.52 项目启用 restful token 鉴权需安装 sizeg/yii2-jwt 扩展,配置 jwt 组件并设置 secret key;在控制器中启用 jwthttpbearerauth 行为强制校验 bearer token;登录成功后生成含 uid、role 等声明的 jwt 并返回,前端须在 authorization 头中携带 bearer 前缀 token。

为 Yii2.0.52 项目启用 RESTful 接口的 Token 鉴权,需绕过传统 session 登录机制,直接对接 JWT 或 Bearer Token 校验逻辑,确保 API 请求携带有效凭证才能访问受保护资源。
安装并注册 JWT 扩展
执行命令安装 sizeg/yii2-jwt 扩展(兼容 Yii2.0.52):
composer require sizeg/yii2-jwt:^2.0
若 composer 报错 【sh: composer: not found】,先按官方方式手动安装 Composer,再重试;未安装会导致后续所有扩展无法载入。
编辑应用配置文件 config/web.php 或 config/main.php,在 components 数组中注册 jwt 组件:
'jwt' => [
'class' => 'sizeg\jwt\Jwt',
'key' => 'your-secret-key-here', // 必须与签发时一致,不可泄露
'algorithm' => 'HS256',
],
配置控制器行为启用 Bearer Token 鉴权
在需要保护的控制器类中(如 controllers/Api/PostController.php),覆盖 behaviors() 方法:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => \sizeg\jwt\JwtHttpBearerAuth::class,
];
return $behaviors;
}
这一步会强制该控制器下所有 action 检查请求头中的 Authorization: Bearer <token></token>;若缺失或无效,直接返回 401 状态码。
注意:若控制器同时支持 OPTIONS 预检请求(如跨域场景),需显式放行——在 behaviors 中追加 'cors' => ['class' => \yii\filters\Cors::class] 并配置 allowedHeaders。
生成并返回 JWT Token
第一步:在登录接口(如 controllers/Api/AuthController.php 的 actionLogin)中验证用户名密码成功后,构建 Token:
$time = time();
$token = Yii::$app->jwt->getBuilder()
->issuedBy('https://api.example.com')
->permittedFor('https://frontend.example.com')
->identifiedBy(uniqid(), true)
->issuedAt($time)
->expiresAt($time + 3600)
->withClaim('uid', $user->id)
->withClaim('role', $user->role)
->getToken();
第二步:将 Token 字符串作为响应体返回,例如:
return ['token' => (string)$token, 'expires_in' => 3600];
第三步:前端必须在后续每个请求头中携带该 Token,格式为:Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...。漏掉 Bearer 前缀或空格会导致鉴权失败。











