【问题标题】:Node Express - Storage and retrieval of authentication tokensNode Express - 身份验证令牌的存储和检索
【发布时间】:2016-04-12 23:24:30
【问题描述】:

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

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

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

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

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

  • 用户提交登录凭据
  • OAuth 2 服务器返回访问令牌
  • 令牌保存在 Express 中的某个位置,由各种 id 键入
  • 生成 cookie 并将其发回以响应客户端。 Cookie 可能包含编码的令牌值?或者可能是存储在 Express 中间件组件中的令牌值的 id?
  • 客户端发出 api 请求,Express 路由中间件获取该请求。
  • Express 检查 cookie 的存在并解码令牌值,或者以某种方式从存储机制服务器端检索。
  • 然后将令牌值用作 express 和最终 api 端点之间的标头

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

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

我对 Express 还很陌生,所以如果有任何关于如何解决这个问题的建议\建议,我将不胜感激。

谢谢

【问题讨论】:

  • 当你从Oauth2服务器收到token时,你可以把它保存在用户端。您可以使用 cookie 或 localstorage HTML 5。
  • 好的,cookie 方法是我的想法,但它需要将令牌的值编码回客户端,然后每次都将其解码,以便 Express 的后续请求到最终终点。

标签: angularjs node.js express oauth-2.0 access-token


【解决方案1】:

正如您所描述的那样,最安全的方法是:

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

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

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

【讨论】:

  • 一个很好的(对我来说)这个答案的好处是将访问令牌存储在后端/db 以及中是有效的,就像在前端 cookie 中一样。我想我会将刷新令牌存储在数据库中,并将访问令牌留在 cookie 中。
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2018-03-20
  • 2011-10-03
  • 2015-11-30
  • 2013-06-27
  • 2018-05-07
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多