picios / tokenizer
简单的URI令牌创建器和验证器
v1.0.1
2019-08-06 08:44 UTC
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: 6.*
This package is auto-updated.
Last update: 2024-09-30 02:05:35 UTC
README
这个库帮助创建和验证URL有效令牌,并在其中存储一些数据。这样的令牌不能被更改,否则它就不再有效。
安装
使用composer安装
composer require picios/tokenizer
用法
创建新的令牌
首先需要创建令牌,例如将其作为电子邮件消息中的查询参数发送
<?php use Picios\Tokenizer\TokenManager; require_once __DIR__ . '/vendor/autoload.php'; $tm = new TokenManager('seed', [ 'id', // information about fields, that the token will contain. In this case only 'id' ]); $token = $tm->createToken([ 'id' => 5, ]); // call token __toString() function echo "{$token}";
解析令牌
传入的令牌必须通过TokenManager::parse()函数进行验证
<?php use Picios\Tokenizer\TokenManager; use Picios\Tokenizer\TokenNotValidException; require_once __DIR__ . '/vendor/autoload.php'; $tm = new TokenManager('seed', [ 'id', // information about fields, that the token will contain. In this case only 'id' ]); // incoming token e.g. from the Request::query object // or just $_GET array $stringToken = 'NDc5NWI4MjAxOS0wOC0wNlQwODozNjoxMCswMjowMHsiaWQiOjV9'; try { $token = $tm->parse($stringToken); echo "This is a secret content taken by token id {$token->get('id')}"; } catch (TokenNotValidException $e) { echo "Invalid token"; exit(); }
创建时间
可以轻松检查令牌的创建时间,以考虑其过期
<?php use Picios\Tokenizer\TokenManager; use Picios\Tokenizer\TokenNotValidException; require_once __DIR__ . '/vendor/autoload.php'; $tm = new TokenManager('seed', [ 'id' // information about fields, that the token will contain. In this case only 'id' ]); // incoming token e.g. from the Request::query object // or just $_GET array $stringToken = 'NDc5NWI4MjAxOS0wOC0wNlQwODozNjoxMCswMjowMHsiaWQiOjV9'; try { $token = $tm->parse($stringToken); echo 'The token was created on ' . $token->getStartTime()->format('Y-m-d H:i:s'); } catch (TokenNotValidException $e) { echo "Invalid token"; exit(); }
它的工作原理
令牌允许您以一种安全的方式在单个字符串中存储有限量的数据。
要创建新的令牌,需要获取带有SEED参数和令牌数据结构的数据的TokenManager对象。它是一个简单的数组,包含令牌数据字段的名称。SEED和结构在创建令牌和解析令牌时必须相同。
当TokenManager对象设置好后,可以调用其createToken(array data)函数,该函数的唯一必需参数是要存储在令牌中的数据关联数组。数据数组必须与TokenManager对象中的结构完全相同。
令牌中的数据是显式的,仅使用base64算法编码。它们可以被轻松解码。对于上面的示例令牌
NDc5NWI4MjAxOS0wOC0wNlQwODozNjoxMCswMjowMHsiaWQiOjV9
解码后的字符串是
4795b82019-08-06T08:36:10+02:00{"id":5}
前6个字符是来自令牌中所有数据以及服务器端仅知的密钥种子创建的MD5散列的子字符串。接下来的25个字符是创建令牌的日期,格式为ATOM。其余部分是用JSON格式编码的数据。
它的安全性和不可变性来自于简单的散列,这是我们令牌的校验和。
故障排除
- 需要记住,令牌中的所有数据都很容易解码,因此不要在其中放置任何机密数据。
- 令牌的容量受其用途的限制。例如,如果将其作为URL查询的一部分,根据HTTP规范,URL的长度没有限制,但请将URL长度保持在2048个字符以下,以便与IE浏览器良好工作。
测试
要测试类,请运行
phpunit test
主页
您可以在 Picios.pl 上了解更多信息