我有一个Express应用程序设置,需要一些关于存储令牌的建议.
我在验证用户帐户后从OAuth 2服务器收到访问令牌,然后我需要将其用于后续的api请求.
我想隐藏来自客户端的令牌值,我相信这样做的一种方法是将令牌保存在服务器上的编码cookie中,以便在进一步请求时,可以通过中间件路由这些令牌,然后cookie就可以了用于检索令牌存储的服务器端,然后用作对实际api端点的持续请求中的头值.
实际上有人已经问过这个问题 - 如何在Angular应用程序中存储身份验证令牌这正是我在我的应用程序中使用的流程,但答案是关于使用Angular服务而我不太确定我想要这样做,肯定这一切都可以由Express处理,因此客户端代码不需要知道令牌,只需要知道API服务器返回的任何错误.
所以我想我需要的流程摘要:
用户提交登录凭据
OAuth 2服务器返回访问令牌
令牌被保存在Express的某个地方,由各种ID键入
生成cookie并将其发回以响应客户端.Cookie包含可能编码的令牌值?或者也许存储在Express中间件组件中的令牌值的id?
客户端发出api请求,Express路由器中间件选择.
快速检查cookie的存在并解码令牌值,或以某种方式从存储机制服务器端检索.
然后将令牌值用作表达式和最终api端点之间的标头
可能已经存在处理这种事情的中间件,我已经看过PassportJS,这似乎是我可能想要使用的东西,但我不太确定它处理我正在工作的服务器上的OAuth2令牌流反对(密码授予),而不是似乎更适合重定向登录OAuth流.
我肯定需要在Express中保存令牌值的地方,所以某种形式的存储(不在内存中,我不认为).
我是Express的新手,所以我会很感激有关如何处理此问题的任何建议或建议.
谢谢
最安全的方法就像你描述的那样:
从某些第三方服务(Google,Facebook等)获取OAuth令牌.
使用Express创建cookie,并将该令牌存储在cookie中.确保在执行此操作时还设置了secure
和httpOnly
Cookie标记:这可确保客户端Javascript代码或任何非SSL连接都无法读取cookie.
每次用户向您的站点发出请求时,您的中间件都可以在Express中读取该cookie,并用于向第三方服务进行所需的任何API调用.
如果您的服务还需要在用户没有主动点击您的网站时向Google/Facebook等发出异步请求,您还应该将他们的令牌存储在您的用户数据库中 - 这样您就可以在代表用户随时随地.
我是express-stormpath的作者,一个Node auth库(类似于Passport),这就是我们在那里做的事情,以确保最大的安全性!