ingenerator / tokenista
简单签名的过期令牌生成器和验证器 - 用于密码重置、CSRF、身份验证等
v1.6.0
2022-10-16 19:06 UTC
Requires
- php: ~8.0.0 || ~8.1.0 || ~8.2.0
- ext-openssl: *
- lib-openssl: *
Requires (Dev)
- phpunit/phpunit: ^9.5.5
README
Tokenista 是一个轻量级的库,用于生成和验证签名令牌,可用于密码重置链接、身份验证、CSRF或任何其他可能需要的情况。它旨在安全(尽管您应该始终审查所有安全相关代码)并且具有最小外部依赖。
安装
将 tokenista 添加到 composer.json,然后运行 composer update
安装。
{ "require": { "ingenerator/tokenista": "^1.4" } }
基本用法
$secret = 'some-constant-secret-value'; $tokenista = new \Ingenerator\Tokenista($secret, array('lifetime' => 3600)); // Generate with default lifetime from constructor options $token = $tokenista->generate(); // Overall check if token is valid if ($tokenista->isValid($token)) { // Do whatever } // Or for more control use: $tokenista->isExpired($token); $tokenista->isTampered($token);
Tokenista 以 {random}-{expirytime}-{signature} 的形式生成令牌,作为单个字符串,base64 编码,适合包含在大多数地方。
验证额外值
您可能希望使用 Tokenista 的签名机制来验证某些额外数据是否未遭到篡改。例如,您可以使用此方法在 URL 中包含电子邮件地址或其他确认信息,而不是需要在服务器端存储令牌与用户之间的映射记录。
$token = $tokenista->generate(3600, ['user_id' => 9123]); // Then, later: if ($tokenista->isValid($_GET['token'], ['user_id' => $_GET['user_id']]) { // You can now trust user_id, even if it came through the URL, because it matches the value you originally signed // for this token. }
轮换密钥
定期轮换密钥是良好的做法 - 但不要使尚未过期的签名无效。这很容易做到 - 添加一个 old_secrets
配置选项,包括任何仍然有效的先前密钥。Tokenista 将开始使用新的密钥生成新的令牌,同时仍然接受使用较旧值签名的令牌。
一旦您的最大令牌过期时间已过,您就可以从列表中删除旧密钥,Tokenista 将停止接受它。
测试和开发
tokenista 有一个完整的 PHPUnit 单元测试套件 - 使用 ./vendor/bin/phpunit
运行它们。只有附带良好结构化单元测试的贡献才会被接受。使用 composer 安装应为您提供所需的所有内容,以便在项目上工作。
许可证
tokenista 由 inGenerator Ltd 版权所有,2014年发布,遵循 BSD 许可证。