CakePHP|CakePHP 3 auth Token令牌实现
【CakePHP|CakePHP 3 auth Token令牌实现】在开发api接口的时候,不可避免会碰到登录验证,本文介绍如何安装与使用 cakephp-jwt-auth 实现CakePHP3
Auth组件的 Token 验证。
介绍
cakephp-jwt-auth
插件是 实现 JSON Web Tokens 的 CakePHP 3
Auth组件拓展插件。
安装
composer require admad/cakephp-jwt-auth
加载插件
$ bin/cake plugin load ADmad/JwtAuth
配置插件
// In your controller, for e.g. src/Api/AppController.php
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'storage' => 'Memory',
'authenticate' => [
// auth组件配置参数,请务必添加此参数,否则auth组件验证不生效
'Form' => [
],
'ADmad/JwtAuth.Jwt' => [
'userModel' => 'Users',
'fields' => [
'username' => 'id'
],// get 参数名
'parameter' => 'token',// 如果设置为true,则每次查询数据库返回用户数据,否则返回token解析数据
'queryDatasource' => false
]
],'unauthorizedRedirect' => false,
'checkAuthIn' => 'Controller.initialize'
]);
}
使用
// In your controller, for e.g. src/Api/UsersController.php
public function initialize()
{
parent::initialize();
$this->Auth->allow(['login']);
}// 登录
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
$token = null;
if ($user) {
// 其他配置请查看JWT官方手册
$token = JWT::encode([
'sub' => $user['id'],
'exp' =>time() + 604800 // 过期时间
], Security::getSalt());
}// output your token
}
}
前端获取token后保存,每次请求添加
authorization
或token
请求参数即可通过验证。header参数示例,需要在token前添加
bearer[空格]
authorization: bearer token
其他
- 由于
Token
令牌本身已储存了认证信息,Token
泄露后会产生很多安全问题,所以在安全性有一定要求的应用中,过期时间应设置较小,且尽量使用Https协议传输,或者在服务器端再添加相关验证逻辑 -
Token
本身为无状态令牌,当用户权限修改后且Token
未失效,会出现权限不匹配问题,此类情况需要在服务端添加验证逻辑
Token
的身份验证方式将会越来越多。Token
本身并不复杂,上述部分仅仅是JWT
在CakePHP
中的插件,对于其他框架或程序,我们也可以利用JWT
来生成自己的Token
。composer require firebase/php-jwt
// set token
$token = JWT::encode([
// 你的数据
'sub' => ‘主题’,
'exp' =>time() + 604800,
...
], '你的密钥', 'HS256');
// decode token - token解析
try {
$payload = JWT::decode(
$token, // token值
'你的密钥',
'HS256' // 对应加密方式
);
return $payload;
} catch (Exception $e) {
throw $e;
}
推荐阅读
- 14--Python|14--Python 面向对象进阶
- node使用JsonWebToken|node使用JsonWebToken 生成token,完成用户登录、登录检测
- Unable|Unable to add window -- token null is not valid; is your activity running?
- RpcException:|RpcException: Invalid token! Failed to invoke method
- 全栈框架应用快速集成|全栈框架应用快速集成 Authing SSO
- Authing|Authing 团队管理 + Wechaty 机器人 = 无限可能
- 鉴权 5 兄弟(cookie、session、token、jwt、单点登录,终于有人说清楚了!)
- 你可能想要集成一个|你可能想要集成一个 Discourse 论坛(使用 Authing SSO 零代码帮你实现单点登录)
- Spring|Spring Boot 整合 Sa-Token 实现登录认证
- 码农架构 | Spring Boot 实现通用 Auth 认证的 4 种方式