stayallive/random-tokens

生成和处理带前缀的随机令牌。

v1.0.1 2024-04-12 09:14 UTC

This package is auto-updated.

Last update: 2024-09-12 10:07:32 UTC


README

Latest Version Software License Build Status Total Downloads codecov

此包提供了一种简单的方法来生成前缀随机令牌,灵感来源于GitHub令牌格式

令牌由以下部分组成

  • 令牌总是以1-6个字符的前缀开头
  • 后跟一个_
  • 后跟30-242个随机字符(《a-zA-Z0-9》)
  • 后跟一个6个字符的base62 CRC32校验和

令牌的总长度不能超过255个字符。

安装

composer require stayallive/random-tokens

使用

生成令牌

<?php

use Stayallive\RandomTokens\RandomToken;

// The prefix is required, but the length is optional and defaults to 30
$token = RandomToken::generate('prefix', length: 30);

echo (string)$token;   // Outputs: prefix_ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu2ZIDR0
echo $token->prefix;   // Outputs: prefix
echo $token->random;   // Outputs: ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu
echo $token->checksum; // Outputs: 2ZIDR0

验证令牌

<?php

use Stayallive\RandomTokens\RandomToken;

// Construct a random token from a string, this will validate the token and throws an exception if it's invalid
try {
    $token = RandomToken::fromString('prefix_ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu2ZIDR0');
} catch (\Stayallive\RandomTokens\Exceptions\InvalidTokenFormatException) {
    // Indicates the token is not in the expected format
} catch (\Stayallive\RandomTokens\Exceptions\InvalidTokenChecksumException) {
    // Indicates the token does not have a valid checksum
} catch (\Stayallive\RandomTokens\Exceptions\InvalidTokenException) {
    // Indicates the token is invalid for any of the reasons above
}

// If the token is valid you can extact the prefix, token and checksum for further validation
echo $token->prefix;   // Outputs: prefix
echo $token->random;   // Outputs: ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu
echo $token->checksum; // Outputs: 2ZIDR0

存储令牌

根据您的使用情况,建议不要以纯文本形式存储令牌。

不需要存储校验和,因为它可以从令牌的随机部分重新计算,并且由于前缀通常是静态的,因此也不需要存储它。

您可以使用RandomToken::hash(binary: false)方法将令牌存储为哈希格式。此方法将使用SHA-256哈希令牌的随机部分,并返回一个64字符的字符串。或者,您可以将true作为binary参数传递给hash()以获取32字节的原始二进制输出。

如果您在缓存中存储有关令牌的信息,您还可以使用RandomToken::cacheKey()来获取令牌的缓存键。缓存键构造为token:<prefix>:<hash>,其中<prefix>是令牌的前缀,而<hash>是令牌随机部分的SHA-256哈希。

安全漏洞

如果您在此包中发现安全漏洞,请将电子邮件发送到Alex Bouma的alex+security@bouma.me。所有安全漏洞都将迅速得到解决。

许可协议

此包是开源软件,根据MIT许可协议许可。