Сбой внутренней библиотеки Google OAuth со ссылкой на аккаунт

Я использую Actions Builder + неявную привязку учетной записи OAuth + выполнение встроенного веб-перехватчика. Связывание аккаунтов работает. Вот поток:

  1. Призыв
  2. Откройте веб-страницу входа для авторизации oAuth
  3. Перенаправить на https://oauth-redirect.googleusercontent.com/r/... с токеном
  4. Аккаунт привязан; ко всем запросам выполнения веб-перехватчиков прикреплен токен
  5. Все запросы на выполнение завершаются с ошибкой библиотеки Google oAuth.

Независимо от формата генерируемого мной токена доступа, простой строки или JWT, каждый последующий запрос к веб-перехватчику выполнения с переданным токеном доступа автоматически завершается ошибкой:

Error: Wrong number of segments in token: Bearer 12345abcde
    at OAuth2Client.verifySignedJwtWithCertsAsync (/workspace/node_modules/google-auth-library/build/src/auth/oauth2client.js:535:19)
    at OAuth2Client.verifyIdTokenAsync (/workspace/node_modules/google-auth-library/build/src/auth/oauth2client.js:401:34)
    at process._tickCallback (internal/process/next_tick.js:68:7)

С токеном в формате JWT:

SyntaxError: Can't parse token envelope: Bearer 12345abcdeJWTtoken: Unexpected token  in JSON at position 0
    at JSON.parse (<anonymous>)
    at OAuth2Client.verifySignedJwtWithCertsAsync (/workspace/node_modules/google-auth-library/build/src/auth/oauth2client.js:542:29)

Пример значения webhookResponse в тестовой консоли Действия:

Unsuccessful webhook call due to client issue: Error querying agent endpoint. State: URL_UNREACHABLE, reason: UNREACHABLE_5xx.

{
  "responseJson": {
    "error": "Wrong number of segments in token: Bearer abcde12345"
  }
}

package.json:

{
  "name": "ActionsOnGoogleFulfillment",
  "version": "0.0.0",
  "private": true,
  "description": "Actions on Google fulfillment",
  "engines": {
    "node": "10"
  },
  "main": "index.js",
  "dependencies": {
    "@assistant/conversation": "^3.0.1",
    "firebase-admin": "^8.13.0",
    "firebase-functions": "^3.7.0"
  }
}

Что тебе здесь делать?


person James    schedule 08.07.2020    source источник


Ответы (1)


Нашел проблему.

Включая clientId в конструктор, например const app = conversation({clientId: CLIENT_ID}) заставляет процессор аутентификации Google обрабатывать заголовок Authorization как токен GSI, несмотря ни на что, поэтому синтаксический анализ завершается неудачно.

Удаление clientId из конструктора исправило его.

person James    schedule 08.07.2020