Должен ли 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. есть 1 oauth2Client и кешировать / сохранять токены для каждого пользователя и вставлять их, используя oauth2Client.setCredentials(userSpecificTokens) на каждый запрос. Это по сути создает новый oauth2Client по запросу.
  2. иметь 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/

Вы можете указать объект аутентификации, который будет использоваться для каждого запроса. Каждый запрос также наследует параметры, указанные на уровне обслуживания и глобальном уровне.

Другие вопросы по тегам