a4sex/self-signed-token

基于密钥字符串和创建时间的一个简单的自签名令牌。

v1.1.0 2023-04-05 09:46 UTC

This package is auto-updated.

Last update: 2024-09-05 13:06:42 UTC


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);