Выпуск веб-токенов JSON

В этом документе описывается, как выдавать веб-токены JSON в рамках предоставления вашим веб-приложениям и мобильным приложениям доступа к данным Fleet Engine. Если вы еще этого не сделали, прочитайте «Веб-токены JSON» в разделе «Безопасность в Fleet Engine» . С помощью службы Fleet Engine вы можете выдавать JWT одним из следующих способов:

  • Используйте библиотеку авторизации . Google рекомендует использовать этот подход, если ваша база кода написана на Java. Эта библиотека обрабатывает выдачу JWT для всех сценариев использования, которые могут вам понадобиться для службы, и значительно упрощает вашу реализацию.
  • Создайте свои собственные JWT . Если вы не можете использовать нашу библиотеку JWT, вам придется встроить их в свою собственную базу кода. В этом разделе представлены различные примеры JWT для каждого сценария.

Используйте библиотеку авторизации для Java

Чтобы использовать библиотеку авторизации Fleet Engine для Java, посетите репозиторий GitHub . Библиотека упрощает создание JWT Fleet Engine и надежно подписывает их. Он обеспечивает следующее:

  • Объявления зависимостей проекта
  • Полный список всех ролей сервисных учетных записей для поездок по требованию или запланированных задач.
  • Механизмы подписи токенов, отличные от использования файлов учетных данных, например олицетворение учетной записи службы.
  • Прикрепляет подписанные токены к исходящим запросам, сделанным из заглушки gRPC или клиента GAPIC.
  • Инструкции по интеграции подписывающих сторон с клиентскими библиотеками Fleet Engine

Если вы выдаете JWT из своего кода

Если вы не можете использовать библиотеку авторизации для Java, вам необходимо реализовать JWT в своей собственной базе кода. В этом разделе представлены несколько рекомендаций по созданию собственных токенов. Список ролей учетной записи службы, а также полей и утверждений JWT см. в разделе Веб-токены JSON в разделе «Безопасность в Fleet Engine» . В следующем разделе приведен список примеров JWT для поездок по требованию или запланированных задач.

Общие рекомендации

  • Используйте соответствующие роли . Это гарантирует, что пользователь, запрашивающий токен, имеет право просматривать информацию, к которой токен предоставляет ему доступ. Конкретно:
    • При подписании JWT для передачи на мобильное устройство используйте учетную запись службы для роли Driver или Consumer SDK . В противном случае мобильное устройство сможет изменить состояние, в котором оно не должно быть.
    • Аналогично, при подписании JWT, который будет использоваться для привилегированных вызовов, обязательно используйте учетную запись службы с правильной ролью администратора Fleet Engine . В противном случае операция завершится неудачей.
  • Делитесь только созданными токенами . Никогда не передавайте учетные данные, использованные для создания токенов.
  • Для вызовов gRPC механизм прикрепления токена зависит от языка и платформы, используемых для выполнения вызова. Механизм указания токена для HTTP-вызова заключается во включении заголовка Authorization с токеном-носителем, значением которого является токен.
  • Возвратите время истечения срока действия. Ваш сервер должен вернуть срок действия токена, обычно в секундах.
  • Чтобы создать и подписать JSON напрямую в качестве носителя токена вместо использования токенов доступа OAuth 2.0, прочтите инструкции по авторизации учетной записи службы без OAuth в документации Identity Developer.

Для поездок по требованию

  • При создании полезных данных JWT добавьте дополнительное утверждение в раздел авторизации, указав для ключа vehicleid или tripid значение идентификатора транспортного средства или идентификатора поездки, для которого выполняется вызов.

Для запланированных задач

  • Когда ваш сервер вызывает другие API, токены также должны содержать соответствующее утверждение. Для этого вы можете сделать следующее:
    • Установите значение каждого ключа * .
    • Предоставьте пользователю доступ ко всем taskids и deliveryvehicleids . Для этого вы добавляете в раздел авторизации дополнительную заявку с ключами taskid и deliveryvehicleid .
    • При использовании звездочки ( * ) в утверждении taskids она должна быть единственным элементом в массиве.

Примеры JWT для поездок по требованию

В этом разделе представлены примеры JWT для распространенных сценариев, если вы используете поездки по требованию.

Пример токена для операции внутреннего сервера

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_provider_service_account"
}
.
{
  "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
  "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "*",
     "tripid": "*"
   }
}

Пример токена для операции приложения драйвера

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_driver_service_account"
}
.
{
  "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
  "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "driver_12345"
   }
}

Пример токена для операции потребительского приложения

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_consumer_service_account"
}
.
{
  "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "tripid": "trip_54321"
   }
}

Примеры JWT для запланированных задач

В этом разделе представлен пример JWT для типичных сценариев, если вы используете запланированные задачи.

Пример токена для операции внутреннего сервера

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }

Пример токена для операции пакетного создания задач на внутреннем сервере

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }

Пример токена для операции внутреннего сервера для каждой доставки транспортного средства

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }

Пример токена для приложения водителя

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }

Пример токена для потребительского приложения

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

Пример токена для отслеживания всех задач и транспортных средств

В следующем примере показан токен, который отслеживает все задачи и транспортные средства в парке. См. раздел «Настройка библиотеки отслеживания парка JavaScript» для реализации на стороне клиента, которая будет использовать этот токен:

  • Подпишите токен, используя роль IAM облака Fleet Engine Delivery Fleet Reader .

   {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_consumer_service_account"
    }
    .
    {
      "iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "scope": "https://www.googleapis.com/auth/xapi",
      "authorization": {
         "taskid": "*",
         "deliveryvehicleid": "*",
       }
    }

Что дальше