我正在使用 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 个
oauth2Client
和缓存/保存 token ,并在每个请求中使用oauth2Client.setCredentials(userSpecificTokens)
注入(inject)它们。这实质上是为每个请求创建一个新的oauth2Client
。 - 每个用户都有一个
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/