Node Express - 身份验证令牌的存储和检索

Node Express - Storage and retrieval of authentication tokens

我有一个 Express 应用程序设置,需要一些有关存储令牌的建议。

我在验证用户帐户后从 OAuth 2 服务器收到访问令牌,然后我需要将其用于后续 api 请求。

我想对客户端隐藏令牌值,我相信这样做的一种方法是将令牌保存在服务器上的编码 cookie 中,以便在发出进一步请求时,可以通过中间件和然后可以使用 cookie 检索存储在服务器端的令牌,然后在对实际 api 端点的持续请求中用作 header 值。

实际上已经有人问过这个问题 - How to store an auth token in an Angular app 这正是我在我的应用程序中使用的流程,但答案是关于使用 Angular 服务,我不太确定我想这样做,当然这一切都可以由 Express 处理,因此客户端代码不需要知道令牌,只需要 API 服务器 returns 返回的任何错误。

所以我认为我需要的流程摘要:

可能已经有处理这种事情的中间件,我已经看到 PassportJS 似乎是我可能想要使用的那种东西,但我不太确定它处理 OAuth2 令牌流我正在使用的服务器(密码授予)似乎更适合重定向登录 OAuth 流程。

我肯定需要在某个地方保存 Express 中的令牌值,所以某种形式的存储(我不认为不在内存中)。

我是 Express 的新手,所以非常感谢 suggestions\advice 如何解决这个问题。

谢谢

最安全的方法就是按照您的描述:

  • 从某些第三方服务(Google、Facebook 等)获取 OAuth 令牌。
  • 使用 Express 创建一个 cookie,并将该令牌存储在 cookie 中。确保在执行此操作时还设置了 securehttpOnly cookie 标志:这确保了 cookie 不能被 client-side Javascript 代码或任何 non-SSL连接。
  • 每次用户向您的网站发出请求时,您的 Express 中的中间件都可以读取该 cookie,并用于向第三方服务发出您需要的任何 API 调用。

如果您的服务还需要在用户没有主动点击您的网站时向 Google / Facebook 等发出异步请求,您也应该将他们的令牌存储在您的用户数据库中的某个地方-- 这样您就可以在需要时代表用户发出请求。

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