a4sex / self-signed-token
基于密钥字符串和创建时间的一个简单的自签名令牌。
v1.1.0
2023-04-05 09:46 UTC
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
基于密钥字符串和过期时间的简单自签名令牌。过期时间和签名作为令牌的一部分保存。令牌的过期时间易于检查。通过签名也易于验证其真实性。
$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);