如果我想坚持用户'登录,以便即使在1年不活动之后也不必重新登录,然后存储永久访问令牌与直接存储密码(可能是哈希),因为(永久)访问令牌基本上是"替代密码"?
答案 0 :(得分:2)
存储访问令牌肯定比直接存储密码更安全,但让我们看看原因:
答案 1 :(得分:1)
一般来说,是的。 但,有很多警告。
由CSPRNG 生成的一个长的随机令牌(这非常重要,有不同的方法来生成“随机”字符串而不是所有字符串都是随机的),比密码 - 是的。但是,您打算使用此令牌的方式意味着它本身实际上是一个密码,这意味着适用相同的标准:
不能永久。
密码的一个关键属性是它们不是常量,用户可以在被盗时或其他时间更改密码。任何类型的令牌都应该没有什么不同,除非它应该由您的应用程序定期自动更改(轮换)。
必须要哈希!
(使用强大的算法:bcrypt,scrypt,Argon-2I,PBKDF2;其他任何事情都是错误的)
不要在任何地方以纯文本格式存储用户密码。即使保证用户不在任何其他站点上使用此密码,明文密码也意味着任何掌握数据库的人(即使是短暂的时间)都可以劫持用户帐户。
您有责任保护您的用户不仅免受“黑客”的侵害,还要保护您自己。
请勿将其存储在Cookie中,即使经过哈希处理或加密也是如此。
你说问题的方式意味着你会做这样的事情。 Cookie不是存储任何密码的安全位置。 临时的,短期的令牌 - 当然,但不是密码。
看起来您正在尝试设计自己的身份验证协议,这不是一件容易的事。它可能很容易使它工作,但这大约是工作的5%;这里有太多细节需要考虑。所有这一切,为了节省用户偶尔输入密码的轻微不便的微小好处 - 人们习惯了这一点;它不值得冒安全风险。
如果您一心想提供长期登录,我建议使用现有的身份验证协议。每个此类协议都使用加密签名,完全避免依赖用户密码,因此几乎完全消除了上述所有问题。
就个人而言,我只会允许所谓的“社交登录” - 通过Facebook,谷歌,Twitter。您根本不需要处理密码,任何人都可以通过单击按钮登录。
答案 2 :(得分:0)
最好存储一个访问令牌,而不是存储密码或哈希密码(总是可以尝试蛮力来查找密码),我认为你应该给一个令牌一辈子。
答案 3 :(得分:0)
虽然答案是肯定的,但它也取决于您存储令牌的位置。您可能希望使用XSRF / CSRF令牌以及令牌来授权用户。
但存储令牌比存储密码更好。