Должен ли OAuth2Client создаваться для каждого запроса или кэшироваться для каждого пользователя?
Я использую версию узла клиента API Google. То есть: https://github.com/google/google-api-nodejs-client/.
В рамках этого я настраиваю oauth-поток (точнее, поток "веб-сервер Google").
Как часть аутентификации это состоит из выполнения вызовов как:
var oauth2Client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
а также
oauth2Client.setCredentials(userSpecificTokens)
Очевидно, что первый вызов зависит от приложения, а второй - от пользователя.
Что считается хорошей практикой в этом случае? или:
- есть 1
oauth2Client
и кешировать / сохранять токены для каждого пользователя и вставлять их, используяoauth2Client.setCredentials(userSpecificTokens)
на каждый запрос. Это по сути создает новыйoauth2Client
по запросу. - иметь
oauthClient
на пользователя, в том числеoauth2Client.setCredentials(userSpecificTokens)
уже применяется, который создается при необходимости и кешируется впоследствии.
1 ответ
Я считаю, что ваш первый подход правильный
иметь 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/
Вы можете указать объект аутентификации, который будет использоваться для каждого запроса. Каждый запрос также наследует параметры, указанные на уровне обслуживания и глобальном уровне.