生成具有内置有效期

时间:2018-03-08 11:18:23

标签: php security token

是否可以生成具有内置有效期的令牌?如果是这样,最安全的方法是什么?

为了实现这一点,生成日期时间必须在令牌中以安全的方式编码。

3 个答案:

答案 0 :(得分:2)

为什么不使用JWT最简单的形式,而不是在时间定义之后,你可以省略声明... JWT完全符合这个法案。

答案 1 :(得分:1)

有时我在后端没有任何数据库时需要这个。 您可以使用安全熵源生成随机字节(对于PHP 7为random_bytes,openssl_random_pseudo_bytes或直接读取/ dev / urandom文件),然后将时间戳打包为字节:IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest; WebHeaderCollection headers = request.Headers; string host = null; if (headers["TraceId"] != null) host = headers["TraceId"];` 将其附加到随机字节,然后使用HMAC服务器的密钥。

令牌创建:

pack('N', time());

查看:

$random = random_bytes(8);
$time = pack('N', time());
$token = $time . $random;
$sign = hash_hmac('sha256', $token, $SERVER_KEY, true);
$token = $sign . $token;
echo $token;

显然,要记住很多其他安全方面,例如需要存储使用过令牌的回复攻击,至少在它们到期之前。 对于打包和打开包装的时间,我使用了N标志,这是用于Big-Endian,但你也可以使用V代表Little-Endian或L代表机器相关的订单。

答案 2 :(得分:0)

如果你签署你的令牌,比如说HMAC,你可以添加你想要的任何东西,例如到期日期或创建日期,并检查你处理它时的年龄,以确定它是否已经过期。除非您的秘密被泄露,否则HMAC保证不会修改令牌。