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个
oauth2Client
和caching/保存令牌,并在每个请求上使用oauth2Client.setCredentials(userSpecificTokens)
注入它们。 这基本上为每个请求创build一个新的oauth2Client
。 - 每个用户都有一个
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在服务级别和全局级别指定的选项。