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

在使用护照本地策略时,我正在寻找一些有关最佳实践的信息。 我去通过本地战略的例子,使用authToken,login持久性,在github上find。 与同事交谈时,他们提出了这样一个问题:如何将此令牌存储在会话cookie中,比存储密码更安全,因为它本质上就是您在服务器上的身份validation身份。 那么我如何回答这个问题呢? 这是一个绿色的问题,我承认没有完全理解整个生命周期。 那么像bccrypt和mongo一样,这是一个安全的解决scheme。 如果仅仅是一个例子,并不一定意味着要显示一个强大的解决scheme,那么有什么最佳实践来保证我们的用户和应用程序的安全?

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

你的同事没有错,实现不是很安全(实际上可能会被认为是不太安全,因为sessionId可以按原样使用而没有encryption)。

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

但是,这不是安全的实现方式记住我,请参阅基于表单的网站身份validation的权威指南,以获取有关实现rememberMe的好方法的信息。

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

  1. 保持cookie在会话结束时结束(用户closures浏览器时的IE)
  2. 如果用户请求在使用用户名/密码login时记住我,请使用accessToken(httpOnly cookie)发送新的cookie。
  3. 当客户端使用accessToken cookie而不是sessionId cookie发送请求时,使用accessTokenlogin用户,然后将accessToken更改为新的accessToken(无论是在客户端的cookie还是在db用户中)

另外,使用用户名密码login时总是使用https(至less)

编辑:我已经把一个我个人现在使用的例子: https : //gist.github.com/Illniyar/5432646也许它会帮助你相处(虽然有点混乱)。 这个令牌像广告一样工作,但是我还没有使用护照,但是把它移植到护照上也不是太难。 还要注意如何保存用户的密码(每个用户使用不同的salt进行安全保护),以及如何执行注销。