reezy / api-token
reezy api token
v0.2.0
2020-10-15 07:36 UTC
Requires
- php: >7.1
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-05-15 15:59:26 UTC
README
单易用的身份认证组件。
- 签发令牌,登录验证通过后签发令牌,通过响应头
x-token
返回给客户端 - 发送令牌,支持多种方式
- 请求头
Authorization:Bearer
- 请求头,Cookie参数
x-token
- 查询参数,POST参数
token
- 请求头
- 自动续期
- 令牌保鲜时间,时间短(比如2小时)
使用不新鲜的令牌时,服务端会通过响应头x-token
下发新的令牌给客户端。
此时旧令牌仍保持可用60秒,之后使用旧令牌将返回401。 - 令牌失效时间,时间长(比如7天)
使用失效令牌时,服务端返回 401,这时候客户端需要重新登陆
- 令牌保鲜时间,时间短(比如2小时)
- 撤消令牌,用户退出登录 或 手动踢人下线
- 多实例,可以同时存在多个实例
- 多端互踢,每个实例每个用户最多一个新鲜令牌
- 令牌格式,令牌解析后可得到
客户端ID
,用户ID
,签发时间
,签名
- 令牌签名,通过
客户端ID
,用户ID
,签发时间
,设备信息
生成,防止伪造篡改令牌
安装依赖
composer require reezy/api-token
使用
登录验证通过后签发令牌
$manager = $container->get(APITokenManager::class);
// 为指定用户签发一个令牌
$token = $manager->get('app')->issue($request, $userId);
return $response->withHeader($manager->getHeaderTokenKey(), $token);
用户退出登录时撤消令牌
// 获取当前请求中使用的实例
APIToken::get($request)->revoke($userId);
- 需要在控制器或请求上加上中间件
APITokenMiddleware
- 提供了事件
APITokenChecked
,每次令牌验证通过时触发
配置
<?php
return [
'app' => [
'secret_key' => 'SECRET_KEY',
'freshTime' => 7200,
'ttl' => 86400,
],
'admin' => [
'secret_key' => 'SECRET_KEY',
'freshTime' => 7200,
'ttl' => 86400,
],
'header_token_key' => 'x-token',
'params_token_key' => 'token',
];
LICENSE
The Component is open-sourced software licensed under the Apache license.