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