Безопасно ли хранить токен oauth2 в UserProperties? - PullRequest
0 голосов
/ 09 июля 2020

Я использую библиотеку oauth2 для имитации учетной записи службы с пользователем, чтобы получить доступ к API Google в контексте этого пользователя, как в этом примере:

function getService() {
return OAuth2.createService('GoogleDrive:' + USER_EMAIL)
  // Set the endpoint URL.
  .setTokenUrl('https://oauth2.googleapis.com/token')

  // Set the private key and issuer.
  .setPrivateKey(PRIVATE_KEY)
  .setIssuer(CLIENT_EMAIL)

  // Set the name of the user to impersonate. This will only work for
  // Google Apps for Work/EDU accounts whose admin has setup domain-wide
  // delegation:
  // https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
  .setSubject(USER_EMAIL)

  // Set the property store where authorized tokens should be persisted.
  .setPropertyStore(PropertiesService.getUserProperties())

  // Set the scope. This must match one of the scopes configured during the
  // setup of domain-wide delegation.
  .setScope('https://www.googleapis.com/auth/drive');
}

Как вы можете видеть, я храню токен-носитель в свойствах пользователя, и мне интересно, имеет ли это какое-либо влияние на безопасность.

  • Может ли пользователь где-то получить доступ к этому токену (кстати, в Gsuite для этого?)
  • Что на самом деле пользователь может делать с этим токеном (я думаю, он истечет через 1 час, верно?)

1 Ответ

1 голос
/ 10 июля 2020

Из обсуждений комментариев я хотел бы предложить следующий ответ в качестве текущего ответа.

Q1

Может ли пользователь где-то получить доступ к этому токену (афайк есть нет пользовательского интерфейса в Gsuite для этого?)

A: Когда используется PropertiesService.getUserProperties(), пользователь может получить сохраненные значения только в том же проекте GAS. И кажется, что значения не могут быть получены с помощью API и пользовательского интерфейса Google. Ref

Q2

Что пользователь на самом деле может сделать с этим токеном (я думаю, что он истечет через 1 час, верно?)

A: В Google значение по умолчанию expires_in токена доступа составляет 3600 секунд. Об этом вы можете проверить это с помощью следующей команды curl.

curl "https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=###"

Q3

, если пользователь каким-то образом может каким-то образом получить этот токен и использовать его для получения доступа к службам, которые он не должен иметь доступа к.

A: Для автономного проекта GAS, когда у пользователей нет разрешения на запись скрипта, пользователи не могут напрямую видеть токен доступа (в этом случае пользователи не могут использовать журнал.), в то время как сценарий может использовать токен доступа пользователя.

Примечание:

  • Выше ситуация на 10 июля 2020 года. Скрипт Google Apps и API Google сейчас расширяются. . Так что эти спецификации могут быть изменены в будущем обновлении. Пожалуйста, будьте осторожны. Когда я смогу подтвердить, что спецификация была изменена, я хотел бы обновить этот ответ.
...