是否有任何理由不生成随机身份验证令牌


Is there any reason not to just generate a random authentication token?

我正在开发一个web应用程序,并且我正在尝试使用最好的身份验证系统。基本上,我希望客户端向我的服务器发送用户名和密码,并且我希望服务器通过向客户端提供一个令牌来响应,该令牌可以从那时起代替密码使用。

我对此进行了一些研究,我一直看到的建议是使用只有服务器知道的密钥的HMAC。我看到了这种方法的好处,但对我来说,这似乎仍然不是理想的,因为据我所知,它不能过期。

我可以通过将ip地址添加到用于创建/验证hmac的字符串中来增加额外的安全性,我相信,但我仍然不确定这是否是最好的方法。

是否有任何理由不让我的身份验证令牌简单地生成像openssl_random_pseudo_bytes()和存储在我的数据库与ip地址和用户名一起?然后我可以把这个发给用户并根据数据库中的数据验证它。它还允许我很容易过期或注销用户。

如果你有一个只有服务器知道的秘密密钥,它可以在你想要的任何时候过期?只需更改密钥(为过期跟踪目的保留历史记录),所有旧令牌都应该无效。

如果这是您选择的路线,我建议为每个用户使用不同的密钥,这允许您随意撤销特定的用户令牌。