picios/tokenizer

简单的URI令牌创建器和验证器

v1.0.1 2019-08-06 08:44 UTC

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 上了解更多信息