Невозможно обновить access_tokens с помощью Google Analytics > Reporting > Embed API with Service Accounts.

Я использую Google Analytics Embed API для создания отчета в приложении Vue.
Я следую этой документации: https://developers.google.com/analytics/devguides/reporting/embed/v1/component-reference#auth Все работает до истечения срока действия токена доступа. Я ловлю ошибку, получаю новый access_token из серверной части и вызываю авторизацию для повторной аутентификации клиента API для встраивания.

      await window.gapi.analytics.auth.authorize({
  serverAuth: {
    access_token: <my token>
  }
})
const isAuthorized = await window.gapi.analytics.auth.isAuthorized()
// isAuthorized returns true
// however getAuthResponse() still returns the old expired token.
console.log('getAccessToken', await window.gapi.analytics.auth.getAuthResponse().access_token)
// and the call to get the reporting data fails as the authorization header is the old expired header
const data = new window.gapi.analytics.report.Data({ query: params })

Как мне обновить access_token после истечения срока его действия в моем спа-приложении, чтобы встроенный API повторно аутентифицировал учетную запись службы?

1 ответ

Встроенный API Google Analytics основан на Javascript. Он построен на основе клиентской библиотеки Google API JS в бэкэнде.

JavaScript — это неявный поток, что означает, что вы не получите возвращенный вам токен обновления. Сервисные аккаунты также не работают с JavaScript.

По умолчанию ваш единственный вариант — запросить повторный вход пользователя в ваше приложение, когда срок действия токена доступа истечет.

Я видел / слышал о нескольких разработчиках, которым удалось взломать компонент авторизации на стороне сервера, который, например, использовал бы node.js для использования oauth2 или служебной учетной записи, чтобы разрешить обновление авторизации. Это то, что вам нужно будет написать самостоятельно, официально оно не поддерживается API.