是否可以生成具有内置有效期的令牌?如果是这样,最安全的方法是什么?
为了实现这一点,生成日期时间必须在令牌中以安全的方式编码。
答案 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保证不会修改令牌。