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

Angularjs Node Express-身份验证令牌的存储和检索,angularjs,node.js,express,oauth-2.0,access-token,Angularjs,Node.js,Express,Oauth 2.0,Access Token,我有一个Express应用程序设置,需要一些关于存储令牌的建议 在对用户帐户进行身份验证之后,我从OAuth 2服务器接收到一个访问令牌,然后我需要将其用于后续的api请求 我想对客户端隐藏令牌值,我相信这样做的一种方法是将令牌保存在服务器上的编码cookie中,以便在发出进一步请求时,这些可以通过中间件进行路由,然后cookie可以用于检索存储在服务器端的令牌,然后用作发送到实际api端点的持续请求中的头值 实际上有人已经问过这个问题-这正是我在应用程序中使用的流程,但答案谈到使用角度服务,我

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

在对用户帐户进行身份验证之后,我从OAuth 2服务器接收到一个访问令牌,然后我需要将其用于后续的api请求

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

实际上有人已经问过这个问题-这正是我在应用程序中使用的流程,但答案谈到使用角度服务,我不确定我是否会这样做,当然这一切都可以由Express处理,因此客户端代码不需要知道令牌,只要API服务器返回任何错误

因此,我认为我需要的流程摘要:

  • 用户提交登录凭据
  • OAuth 2服务器返回访问令牌
  • 令牌保存在Express中的某个位置,由各种id键入
  • 生成cookie并将其发送回客户端。Cookie是否包含已编码的令牌值?或者可能是存储在Express中间件组件中的令牌值的id
  • 客户端发出api请求,Express route中间件将接收该请求
  • Express检查是否存在cookie,并对令牌值进行解码,或以某种方式从存储机制服务器端检索
  • 然后,令牌值用作express和最终api端点之间的标头
可能已经有中间件处理这类事情了,我已经看到了PassportJS,这似乎是我可能想要使用的东西,但我不太确定它处理我正在使用的服务器上的OAuth2令牌流(密码授予),而似乎更适合重定向登录OAuth流

我当然需要在Express中保存令牌值,所以需要某种形式的存储(我不认为是内存)

我是一个新的表达者,因此如果您能就如何处理这个问题提出任何建议,我将不胜感激


谢谢

最安全的方法正如您所描述的:

  • 从某个第三方服务(谷歌、Facebook等)获取OAuth令牌
  • 使用Express创建cookie,并将该令牌存储在cookie中。执行此操作时,请确保还设置了
    secure
    httpOnly
    cookie标志:这确保客户端Javascript代码或任何非SSL连接都无法读取cookie
  • 每次用户向您的站点发出请求时,您的中间件可以在Express中读取该cookie,并用于对第三方服务进行所需的任何API调用
如果您的服务还需要向Google/Facebook/等发出异步请求。当用户没有在您的网站上积极点击时,您还应该将他们的令牌存储在您的用户数据库中的某个位置——这样,您可以在需要时随时代表用户发出请求


我是Node auth库(类似于Passport)的作者,这就是我们在那里如何确保最大安全性的方法

当您从Oauth2服务器接收令牌时,可以将其保存在用户端。您可以使用cookie或localstorage HTML 5。好的,cookie方法正是我所想的,但它需要将令牌的值编码回客户端,然后每次Express对后续请求进行解码,直到最后一个端点。这是一个好主意(对我来说)根据这个答案,将访问令牌存储在后端/db以及前端cookie中是有效的。我想我会将刷新令牌存储在db中,并将访问令牌保留在cookie中。