ingenerator/tokenista

简单签名的过期令牌生成器和验证器 - 用于密码重置、CSRF、身份验证等

v1.6.0 2022-10-16 19:06 UTC

This package is auto-updated.

Last update: 2024-09-16 23:15:50 UTC


README

  • Master Build Status

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 许可证