我正在寻找有关使用护照本地策略时的最佳做法的一些信息。我去了github上找到的使用authToken的本地策略示例,用于登录持久性。在与同事交谈时,他们提出了一个问题,如何将此令牌存储在会话cookie中比存储密码更安全,因为它本质上是您在服务器上的身份验证身份。那么我该如何回答这个问题呢?这是一个绿色问题,我承认并不完全了解整个生命周期。那么当与bccrypt和mongo集成时,这是一个安全的解决方案,就像示例一样。如果它只是一个例子,并不一定意味着展示一个强大的解决方案,那么保护我们的用户和我们的应用程序安全的最佳做法是什么?
https://github.com/jaredhanson/passport-local/tree/master/examples/express3-mongoose-rememberme
答案 0 :(得分:2)
您的同事没有错,实施不是很安全(实际上它可能被认为不太安全,因为sessionId可以按原样使用而不加密)。
它更安全,因为它只能在30天内使用,而用户名/密码可以在用户删除之前使用。 (它也更有用,因为您可以在不更改密码的情况下删除sessionId。)
然而,这不是实现的安全方式请记住我,请参阅The definitive guide to form-based website authentication以获取有关实现rememberMe的好方法的信息。
基本上你需要更改github代码来执行以下操作:
此外,在使用用户名密码(至少)
登录时,始终使用https编辑: 我在一个要点中举了一个我个人现在使用的例子:https://gist.github.com/Illniyar/5432646 也许它会帮助你相处(虽然它有点混乱)。 这些令牌的工作方式与广告一样,但我还没有使用护照,但是将它移植到护照上应该不会太难。 另请注意如何保留用户的密码(每个用户使用不同的盐安全),以及如何执行注销。