使用Passport持久会话安全时是authToken吗?

时间:2013-04-21 22:04:57

标签: node.js passport.js

我正在寻找有关使用护照本地策略时的最佳做法的一些信息。我去了github上找到的使用authToken的本地策略示例,用于登录持久性。在与同事交谈时,他们提出了一个问题,如何将此令牌存储在会话cookie中比存储密码更安全,因为它本质上是您在服务器上的身份验证身份。那么我该如何回答这个问题呢?这是一个绿色问题,我承认并不完全了解整个生命周期。那么当与bccrypt和mongo集成时,这是一个安全的解决方案,就像示例一样。如果它只是一个例子,并不一定意味着展示一个强大的解决方案,那么保护我们的用户和我们的应用程序安全的最佳做法是什么?

https://github.com/jaredhanson/passport-local/tree/master/examples/express3-mongoose-rememberme

1 个答案:

答案 0 :(得分:2)

您的同事没有错,实施不是很安全(实际上它可能被认为不太安全,因为sessionId可以按原样使用而不加密)。

它更安全,因为它只能在30天内使用,而用户名/密码可以在用户删除之前使用。 (它也更有用,因为您可以在不更改密码的情况下删除sessionId。)

然而,这不是实现的安全方式请记住我,请参阅The definitive guide to form-based website authentication以获取有关实现rememberMe的好方法的信息。

基本上你需要更改github代码来执行以下操作:

  1. 保持cookie在会话结束时结束(当用户关闭浏览器时为I.E.)
  2. 如果用户在使用用户名/密码登录时请求记住我,请使用accessToken(httpOnly cookie)发送新的cookie。
  3. 当客户端发送带有accessToken cookie而不是sessionId cookie的请求时,您使用accessToken登录用户,然后将accessToken更改为新的accessToken(在客户端的cookie和db用户中)
  4. 此外,在使用用户名密码(至少)

    登录时,始终使用https

    编辑: 我在一个要点中举了一个我个人现在使用的例子:https://gist.github.com/Illniyar/5432646 也许它会帮助你相处(虽然它有点混乱)。 这些令牌的工作方式与广告一样,但我还没有使用护照,但是将它移植到护照上应该不会太难。 另请注意如何保留用户的密码(每个用户使用不同的盐安全),以及如何执行注销。