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中。 确保你也设置了
secure
和httpOnly
cookie标志,这样做可以确保cookie不能被客户端的Javascript代码或者任何非SSL连接读取。 - 用户每次向您的站点发出请求时,您的中间件都可以通过Express访问该cookie,并用于向您的第三方服务提供所需的任何API调用。
如果你的服务在用户没有在你的网站上主动点击的时候也需要向Google / Facebook /等发出asynchronous请求,你也应该把他们的令牌存储在你的用户数据库中 – 这样你可以提出请求代表用户,只要你需要。
我是express-stormpath的作者,一个Node auth库(类似于Passport),这就是我们在那里做事情以确保最大的安全性!