freedomsex / self-signed-token
Requires
- php: ^7.4
Requires (Dev)
- phpunit/phpunit: ^9.0
README
基于密钥字符串和过期时间的一个简单的自签名令牌。过期时间和签名作为令牌的一部分保存。令牌的过期时间容易检查。通过签名也很容易验证其真实性。所有这些都不需要查询数据库。也不需要在其他地方保存令牌。您可以在Web服务器级别(通过Nginx)检查令牌。例如,使用 ngx_http_secure_link_module
$signedToken = new SelfSignedToken(); $token = $signedToken->create(); // that's all
我使用此令牌简单地检查其从创建时间起的过期情况。以及基于签名的真实性。所有这些都不需要查询数据库。也不需要将令牌本身保存在其他地方。您可以在Web服务器级别(通过Nginx)检查令牌。例如,使用 ngx_http_secure_link_module
我将Token ID保存在数据库中,以及其创建时间。但如果令牌无效或已过期,我不会查询数据库。这方便防止请求洪水,并作为简单但可靠的反DDoS保护。
+EasySignedToken - 令牌的简化版本。过期时间不保存到令牌中。相反,保存令牌的 创建时间。在验证期间,使用配置中设置的令牌生命周期。在这种情况下,您可以在创建后更改令牌的生命周期。
令牌
6e000eeabea27aa13a0476d656e5a15e.1560148598.70272e700a46b3040ee53f2b083e3875
- 令牌 ID - 6e000eeabea27aa13a0476d656e5a15e
- 过期时间 - 1560148598 (Unix 时间戳)
- 签名 - 70272e700a46b3040ee53f2b083e3875
令牌 ID
MD5 哈希随机生成的字符串。非常随机,但不是为了任何加密保护。只是一个随机字符串。如果您认为这不是您想要的足够随机,您可以传递前缀。您可以将任何字符串 [[:alnum:]-+=_]{1,40}
作为 id
传递。
$id = $signedToken->generateId(); // OR $id = $signedToken->generateId($prefix); $token = $signedToken->create($id); $token = $signedToken->create('anyrandomstring');
过期时间
令牌过期的时间(Unix 时间戳)。$ttl
- 从创建开始的令牌生命周期(秒)。默认 60 秒。您可以根据需要设置时间。
$signedToken = new SelfSignedToken(); // OR $signedToken = new SelfSignedToken($ttl); // OR $signedToken->setTtl($time); $token = $signedToken->create(); $created = $signedToken->created(); // get creation time // OR set any time $token = $signedToken->create($id, $created); $token = $signedToken->create(null, $created);
签名
简单的 MD5 哈希字符串。根据令牌 ID、过期时间和密钥短语生成。
$signedToken = new SelfSignedToken($ttl); // OR $signedToken = new SelfSignedToken($ttl, $secret); $token = $signedToken->create();
绕过
setBypass(true)
- 忽略签名和过期时间
验证
$ignoreSign
和 $ignoreExpires
布尔值
$signedToken->valid($token); // OR $signedToken->valid($token, $ignoreSign); // OR $signedToken->valid($token, $ignoreSign, $ignoreExpires);