Node Express – 存储和检索authentication令牌

我有一个快速应用程序设置,需要一些关于存储令牌的build议。

在validation用户帐户后,我正在从OAuth 2服务器接收访问令牌,然后我需要为后续的api请求使用该帐户。

我想隐藏来自客户端的令牌值,我相信这样做的一个方法是将令牌保存在服务器中的一个编码的cookie,以便进一步的请求时,这些可以通过中间件路由,然后cookie可以用于检索令牌存储服务器端,然后在正在进行的对实际api端点的请求中用作标题值。

有人实际上已经问过这个问题 – 如何在一个Angular应用程序中存储一个身份validation令牌这正是我在我的应用程序中使用的stream程,但答案谈论使用一个Angular服务,我不太确定我想做到这一点,当然这可以全部由Express处理,所以客户端代码不需要知道令牌,只是API服务器返回的任何错误。

所以我认为我需要stream量总结:

  • 用户提交login凭证
  • OAuth 2服务器返回访问令牌
  • 令牌被保存在Express中的某个地方
  • 生成一个cookie并将其发送回客户端。 Cookie包含可能编码的令牌值? 或者,也许存储在Express中间件组件中的令牌值的id?
  • 客户端发出api请求,哪个Express路由中间件启动。
  • 快速检查cookie的存在,并解码令牌值,或以某种方式从存储机制服务器端检索。
  • 令牌值然后被用作expression和最终api端点之间的头部

有可能中间件已经在那里处理这种事情,我已经看到PassportJS似乎是我可能要使用的有点东西,但我不太确定它处理我正在工作的服务器上的OAuth2令牌stream反对(密码授予),而是似乎更适合redirectloginOAuthstream量。

我当然需要在某处保存令牌值,所以某种forms的存储(不在内存中,我不认为)。

对于Express,我是相当新的,所以如果能够解决这个问题的话,我会很感激你的build议。

谢谢

最安全的方法就像你所描述的那样:

  • 从一些第三方服务(谷歌,Facebook,无论)获取OAuth令牌。
  • 使用Express创build一个cookie,并将该令牌存储在cookie中。 确保你也设置了securehttpOnly cookie标志,这样做可以确保cookie不能被客户端的Javascript代码或者任何非SSL连接读取。
  • 用户每次向您的站点发出请求时,您的中间件都可以通过Express访问该cookie,并用于向您的第三方服务提供所需的任何API调用。

如果你的服务在用户没有在你的网站上主动点击的时候也需要向Google / Facebook /等发出asynchronous请求,你也应该把他们的令牌存储在你的用户数据库中 – 这样你可以提出请求代表用户,只要你需要。

我是express-stormpath的作者,一个Node auth库(类似于Passport),这就是我们在那里做事情以确保最大的安全性!