# api-token **Repository Path**: ezy/api-token ## Basic Information - **Project Name**: api-token - **Description**: 单易用的身份认证组件。 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-10-14 - **Last Updated**: 2024-12-22 ## Categories & Tags **Categories**: oauth-dev **Tags**: None ## README ## APIToken Latest Version 单易用的身份认证组件。 - **签发令牌**,登录验证通过后签发令牌,通过响应头 `x-token` 返回给客户端 - **发送令牌**,支持多种方式 - 请求头 `Authorization:Bearer ` - 请求头,Cookie参数 `x-token` - 查询参数,POST参数 `token` - **自动续期** - **令牌保鲜时间**,时间短(比如2小时) 使用不新鲜的令牌时,服务端会通过响应头 `x-token` 下发新的令牌给客户端。 此时旧令牌仍保持可用60秒,之后使用旧令牌将返回401。 - **令牌失效时间**,时间长(比如7天) 使用失效令牌时,服务端返回 401,这时候客户端需要重新登陆 - **撤消令牌**,用户退出登录 或 手动踢人下线 - **多实例**,可以同时存在多个实例 - **多端互踢**,每个实例每个用户最多一个新鲜令牌 - **令牌格式**,令牌解析后可得到 `客户端ID`, `用户ID`,`签发时间`,`签名` - **令牌签名**,通过 `客户端ID`, `用户ID`,`签发时间`,`设备信息` 生成,防止伪造篡改令牌 ## 安装依赖 ```bash composer require reezy/api-token ``` ## 使用 登录验证通过后签发令牌 ```php $manager = $container->get(APITokenManager::class); // 为指定用户签发一个令牌 $token = $manager->get('app')->issue($request, $userId); return $response->withHeader($manager->getHeaderTokenKey(), $token); ``` 用户退出登录时撤消令牌 ```php // 获取当前请求中使用的实例 APIToken::get($request)->revoke($userId); ``` - 需要在控制器或请求上加上中间件 `APITokenMiddleware` - 提供了事件 `APITokenChecked`,每次令牌验证通过时触发 配置 ```php [ '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](LICENSE).