В этом документе описывается, как выпускать JSON Web Tokens для обеспечения доступа ваших веб- и мобильных приложений к данным Fleet Engine. Если вы еще этого не сделали, ознакомьтесь с разделом « Безопасность в Fleet Engine» в документации по JSON Web Tokens . С помощью сервиса Fleet Engine вы можете выпускать JWT одним из следующих способов:
- Используйте библиотеку авторизации — Google рекомендует использовать этот подход, если ваш код написан на Java. Эта библиотека обрабатывает выдачу JWT для всех сценариев использования сервиса и значительно упрощает реализацию.
- Создавайте собственные JWT-токены — Если вы не можете использовать нашу библиотеку JWT, вам потребуется интегрировать их в свой собственный код. В этом разделе приведены различные примеры JWT-токенов для каждого сценария.
Как работают JWT-трекеры
В ненадежных средах, таких как мобильные телефоны и веб-браузеры, ваш бэкэнд-сервер выдает JWT-токены, которые работают следующим образом:
Ваш клиентский код, работающий в среде с низким уровнем доверия, обращается к вашему серверному коду, работающему в среде с полным уровнем доверия, с просьбой запросить соответствующий JWT для передачи в Fleet Engine.
JWT-токены связаны с учетными записями служб, поэтому запросы, отправляемые в Fleet Engine, неявно связываются с учетной записью службы, которая подписала JWT-токен.
Претензии JWT дополнительно ограничивают ресурсы, которыми может располагать клиент, такие как конкретные транспортные средства, поездки или задачи.
Используйте библиотеку авторизации для Java.
Чтобы использовать библиотеку авторизации Fleet Engine для Java, посетите репозиторий GitHub . Библиотека упрощает создание JWT-токенов Fleet Engine и обеспечивает их безопасную подпись. Она предоставляет следующие возможности:
- Объявления зависимостей проекта
- Полный список всех ролей учетных записей сервиса для поездок по запросу или запланированных задач.
- Механизмы подписи токенов, отличные от использования файлов учетных данных, например, имитация учетной записи службы.
- Прикрепляет подписанные токены к исходящим запросам, выполняемым либо из gRPC-заглушки, либо из клиентской библиотеки Google API Codegen (GAPIC).
- Инструкции по интеграции подписантов с клиентскими библиотеками Fleet Engine.
Если вы отправляете JWT-токены из своего кода
Если вы не можете использовать библиотеку авторизации для Java, вам необходимо реализовать JWT в собственном коде. В этом разделе приведены несколько рекомендаций по созданию собственных токенов. Список полей и утверждений JWT см. в разделе «JSON Web Tokens» в подразделе « Безопасность в Fleet Engine» . Роли учетных записей служб , используемые Fleet Engine, см. в разделе «Роли учетных записей служб». Примеры JWT для поездок по запросу или запланированных задач см. в следующем разделе.
Общие рекомендации
- Используйте соответствующие учетные записи служб и роли . Учетная запись службы и связанная с ней роль гарантируют, что пользователь, запрашивающий токен, имеет право просматривать информацию, к которой токен предоставляет ему доступ. В частности:
- При подписании JWT-токена для передачи на мобильное устройство используйте учетную запись службы для роли Driver или Consumer SDK. В противном случае мобильное устройство сможет изменять данные и получать к ним доступ, к которым у него не должно быть доступа.
- При подписании JWT для использования в привилегированных вызовах используйте учетную запись службы с соответствующей ролью администратора Fleet Engine при использовании ADC или JWT. В противном случае операция завершится неудачей.
- Делитесь только созданными токенами . Никогда не сообщайте учетные данные, использованные для создания токенов.
- Для вызовов 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_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_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"
}
}
Примеры применения JWT в эксплуатации флота.
В этом разделе приведен пример использования JWT для типичного сценария эксплуатации флота.
Пример токена для отслеживания всех задач и транспортных средств в автопарке.
В следующем примере представлен токен, который отслеживает все задачи и транспортные средства в автопарке с помощью веб-приложения, используемого оператором. Требуемые для этих операций права доступа шире, чем для клиентских приложений. См. раздел «Настройка библиотеки отслеживания автопарка на JavaScript» для получения информации о реализации на стороне клиента, которая будет использовать этот токен:
Подпишите токен, используя роль IAM в
Fleet Engine Delivery Fleet ReaderCloud.
{
"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": "*",
}
}
Альтернативный метод аутентификации для операций на бэкэнд-сервере.
Google рекомендует использовать ADC для аутентификации операций на бэкэнд-сервере. Если вы не можете использовать ADC и вам необходимо использовать 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_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": "*" } }
Что дальше?
- Проверьте настройки , чтобы создать тестовый автомобиль и убедиться, что ваши токены работают должным образом.
- Для получения информации об использовании ADC вместо JWT для операций на бэкэнд-сервере см. раздел «Обзор безопасности» .