节点Js刷新身份验证令牌

时间:2015-06-24 21:26:25

标签: node.js authentication oauth token

如何为刷新节点js身份验证令牌提供示例?我的意思是我可以刷新auth令牌的参数是什么?例如,如果我可以通过登录和密码刷新它,那么我应该在哪里存储这个params用于单页应用程序?据我所知,将它存储在cookie中并不是安全的好主意,localstorage也不好,因为有些浏览器不支持它。那么也许有人知道刷新令牌的另一种方式?

3 个答案:

答案 0 :(得分:2)

如果使用正确,Cookie是一种非常安全的存储机制。绝不应将本地存储用于身份验证信息。 OWASP对存储安全性有很好的描述:

https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Storage_APIs

引用重要部分:

  •   

    不要将会话标识符存储在本地存储中,因为JavaScript始终可以访问数据。 Cookie可以使用httpOnly标记来降低此风险。

  •   

    [使用本地存储]无法将对象的可见性限制为特定路径,例如HTTP Cookie的属性路径,每个对象在源中共享并使用同源策略进行保护。避免在同一个源上托管多个应用程序,它们将共享相同的localStorage对象,而是使用不同的子域。

回到原来的问题:存储刷新令牌的位置?答案:在HttpOnly Cookie中。这可以防止cookie被XSS攻击窃取,并且它使您的服务器很容易发出新的访问令牌(使用刷新令牌),因为服务器可以在同一请求上同时访问两者。 / p>

您可以添加另一个图层并加密存储在Cookie中的整个刷新令牌。

警告:使用Cookie时,您还需要保护自己免受CSRF attacks

的侵害

我在这两篇博客文章中详细介绍了前端安全性和JWT:

Token Based Authentication for Single Page Apps (SPAs)

https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

免责声明:我在Stormpath工作,我们的服务为您提供了一个安全的托管用户数据库,其中包含许多功能。我们的express-stormpath模块使您可以轻松开始使用应用程序的登录和注册流程。我们正在编写新版本,它将以我在此答案中描述的方式使用访问令牌。

答案 1 :(得分:1)

我创建了包含以下字段的AuthToken模型:

user_id, access_token, refresh_token, access_token_expiration

用户登录成功后,服务器端会将refresh_tokenaccess_token发送到客户端并将其存储到localstorage(旧浏览器的cookie)。

所有后续请求都将与access_token一起发送(我在$ httpProvider中使用标头x-access-token处于角度)。

当令牌过期时,客户需要发送refresh_token以更新access_tokenrefresh_tokenexpiration date。由于我使用套接字,如果它在任何请求中过期,我可以刷新access_token(为此我也为每个请求发送z-refresh-token标头)所以我不应该发送任何额外的请求,我可以保持当前的用户请求,只是在更新后通过套接字事件返回令牌。

希望这会有所帮助

答案 2 :(得分:0)

我个人对帆很了解,但如果你对节点包感兴趣那就是Sails的工具集,请看看水锁。 https://github.com/waterlock/waterlock

如果你不那么关心,请查看json web令牌(这是waterlock使用的)。这篇文章有点旧,但它给你一个很好的想法如何使用它们。 http://www.intridea.com/blog/2013/11/7/json-web-token-the-useful-little-standard-you-haven-t-heard-about

希望这能为你指明方向。

相关问题