8

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

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

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

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

 oauth2Client.setCredentials(userSpecificTokens)

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

在这种情况下,什么被认为是好的做法?任何一个:

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

1 回答 1

2

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

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

但是,这条线是不正确的

这实质上会为每个请求创建一个新的 oauth2Client。

oauth2client 只创建一次,当您更新它时 -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

您可以指定每个请求要使用的身份验证对象。每个请求还继承在服务级别和全局级别指定的选项。

于 2015-12-13T15:39:49.230 回答