node.js - 应该按请求创建 OAuth2Client 还是按用户缓存?

标签 node.js oauth-2.0 google-oauth google-api-nodejs-client

我正在使用 google api 客户端的 Node 版本。即:google-api-nodejs-client .

作为其中的一部分,我正在设置 oauth-flow(准确地说是 'google webserver' 流程。)

作为身份验证的一部分,这包括执行以下调用:

 var oauth2Client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);

 oauth2Client.setCredentials(userSpecificTokens)

显然,第一个调用是特定于应用程序的,而第二个调用是特定于用户的。

在这种情况下,什么是好的做法?要么:

  1. 每个用户有 1 个 oauth2Client 和缓存/保存 token ,并在每个请求中使用 oauth2Client.setCredentials(userSpecificTokens) 注入(inject)它们。这实质上是为每个请求创建一个新的 oauth2Client
  2. 每个用户都有一个 oauthClient,包括已应用的 oauth2Client.setCredentials(userSpecificTokens),它在需要时创建并在之后缓存。

最佳答案

我相信你的第一种方法是正确的

have 1 oauth2Client and cache/save tokens per user and inject them using oauth2Client.setCredentials(userSpecificTokens) on each and every request.

但是,这条线是不正确的

This essentially creates a new oauth2Client per request.

oauth2client 只创建一次,当你新建它时 - new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);

setCredentials() 只是交换存储在 OAuth2Client 对象中的凭据。基本上,这意味着如果您采用第二种方法,您将不必要地拥有许多额外的实例化 OAuth2Client。您唯一需要实例化"new"Oauth2Client 的时间是当您想要连接不同的 token / key 时。

有点将 token 存储在数据库或 session 中,并通过在客户端的单个实例上设置凭据来完全按照您所描述的方式重用它们。 ( https://security.stackexchange.com/questions/72475/should-we-store-accesstoken-in-our-database-for-oauth2 )

作为引用,文档提供了一些见解并基本上描述了您的第一种方法 - https://github.com/google/google-api-nodejs-client/#request-level-options

You can specify an auth object to be used per request. Each request also inherits the options specified at the service level and global level.

关于node.js - 应该按请求创建 OAuth2Client 还是按用户缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384717/

相关文章:

oauth-2.0 - Google OAuth2授权OAuth token 错误:redirect_uri_mismatch

javascript - js中的CAC(Common Access Card)读卡器

ubuntu - 如何在 Ubuntu 中跟上最新版本的 Node.js?购电协议(protocol)?编译?

javascript - rijndael-128 cbc javascript 不像 php mcrypt 那样返回正确

spring-security - 升级到 springBootVersion = '1.3.3.RELEASE' 后使用 RestTemplate 出现异常

ruby-on-rails - 尝试使用 Google Calendar API 时出现 "Missing authorization code"错误

node.js - 无法删除 Node Express 中的 x-powered-by header

vue.js - Auth0:无效的访问 token 负载,使用 A256GCM 算法加密的 JWT

ruby-on-rails-4 - Rails Google Oauth2 - 旧版 People API 尚未在项目中使用

java - 在 Spring Boot 中使用 Google OAuth2 时无法访问 OAuth2AuthenticationToken