reezy/api-token

reezy api token

v0.2.0 2020-10-15 07:36 UTC

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,这时候客户端需要重新登陆
  • 撤消令牌,用户退出登录 或 手动踢人下线
  • 多实例,可以同时存在多个实例
  • 多端互踢,每个实例每个用户最多一个新鲜令牌
  • 令牌格式,令牌解析后可得到 客户端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.