2013-04-21 29 views
1

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

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

回答

2

你的同事是没有错的,执行是不是很安全(实际上可以认为是不太安全的,因为SessionID的可作为是不加密)。

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

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

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

  1. 保持cookie来结束在会议结束时(即当用户关闭浏览器)
  2. 如果用户请求用用户名/密码登录时记住我,用accessToken(httpOnly cookie)发送一个新的cookie。
  3. 当客户端发送与的accessToken Cookie,但不是的sessionId cookie的请求,登录用户在使用的accessToken,然后更改的accessToken到一个新的accessToken(无论是在客户端的cookie和数据库用户)
  4. 我就把我个人的要点,现在用一个例子: https://gist.github.com/Illniyar/5432646 也许会

也与用户名密码登录时(至少是)

编辑总是使用https帮助你相处(虽然这有点混乱)。 令牌的工作原理与广告一样,但我还没有使用护照,但将它移植到护照上应该不会太难。 还要注意用户密码的保存方式(每个用户使用不同的盐保护)以及如何执行注销。

+0

我已经把我个人在一个要点中使用的例子: https://gist.github.com/Illniyar/5432646 也许它会帮助你,但它有点混乱。还没有护照。 – 2013-04-22 05:53:11