OAuth2Client应该创build每个请求或caching每个用户?

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

作为这个的一部分,我设置了oauth-flow( 'google webserver'stream程是确切的。)

作为身份validation的一部分,这包括做如下的调用:

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

  oauth2Client.setCredentials(userSpecificTokens) 

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

在这种情况下什么被认为是好的做法? 之一:

  1. 每个用户有1个oauth2Client和caching/保存令牌,并在每个请求上使用oauth2Client.setCredentials(userSpecificTokens)注入它们。 这基本上为每个请求创build一个新的oauth2Client
  2. 每个用户都有一个oauthClient ,包括已经应用的oauth2Client.setCredentials(userSpecificTokens) ,它是在需要时创build的,然后被caching。

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

每个用户有1个oauth2Client和caching/保存令牌,并在每个请求上使用oauth2Client.setCredentials(userSpecificTokens)注入它们。

但是,这一行是不正确的

这基本上为每个请求创build一个新的oauth2Client。

oauth2client只创build一次,当你new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);它 – new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);

setCredentials()只是交换存储在该OAuth2Client对象中的凭证。 基本上,这意味着如果你使用第二种方法,那么你会有许多额外的实例化OAuth2Client的不必要的。 你唯一需要实例化一个“新”的Oauth2Client的时候是你想连接一个不同的令牌/密钥的时候。

将令牌存储在数据库或会话中并将它们重复使用,正如您通过在客户端的单个实例上设置凭据所描述的那样,这是比较常见的。 ( 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

您可以指定每个请求使用的auth对象。 每个请求还会inheritance在服务级别和全局级别指定的选项。