使用 OAuth 和类似的身份验证协议需要使用临时令牌,这些令牌代表多个 Web 服务之间的唯一握手。 这些令牌必须是唯一的、安全存储的,并且越长越好。
由于我已经离开 PHP 游戏一段时间了,我一直在研究如何在没有额外库的情况下创建这样的令牌。 以下代码片段可以解决问题:
// bin2hex(random_bytes($length))
$token = bin2hex(random_bytes(64));
/*
Examples:
39e9289a5b8328ecc4286da11076748716c41ec7fb94839a689f7dac5cdf5ba8bdc9a9acdc95b95245f80a00d58c9575c203ceb541507cce40dd5a96e9399f4a
1c46538c712e9b5bf0fe43d692147004f617b494d004e29daaf33e4528f253db5d911a690856f0b77cfa98103c8231bffff869f179125d17d28e52bfadb9f205
...
*/
如果您没有使用 PHP7 或更高版本,则可以回退到以下内容:
$token = bin2hex(openssl_random_pseudo_bytes(64));
拥有 OpenSSL 的支持来生成令牌可以让人相信令牌将是唯一的。 当然,您也可以进行存储检查以确保令牌尚未使用,但如果您使用 64 或更大的长度,重复令牌的机会非常小!