Веб-токены JSON

JSON Web Token (JWT) — это открытый веб-стандарт, используемый для аутентификации и авторизации обмена информацией между клиентом и сервером. Когда пользователь приложения впервые входит в систему с соответствующими учетными данными роли, сервер создает и возвращает закодированный, подписанный цифровой подписью JWT для использования в последующих запросах. Этот процесс одновременно аутентифицирует пользователя и предоставляет ему доступ к маршрутам, сервисам и ресурсам в соответствии с его ролью в учетной записи.

Для вызова методов API из сред с низким уровнем доверия (смартфонов и браузеров) Fleet Engine требует использования JSON Web Tokens (JWT).

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

Ключевые детали

В отличие от ключей API, JWT имеют короткий срок действия и ограничивают операции только теми, которые разрешены для выполнения данной роли. Дополнительную информацию о JWT см. в статье «JSON Web Tokens» в Википедии. Подробную информацию о ролях доступа см. в разделе «Роли учетных записей служб» в этом руководстве.

Элементы JWT

JWT-токены содержат заголовок и раздел утверждений. Раздел заголовка содержит такую ​​информацию, как закрытый ключ, полученный от учетных записей служб, и алгоритм шифрования. Раздел утверждений содержит такую ​​информацию, как время создания JWT, время жизни, службы, к которым JWT имеет доступ, и другую информацию об авторизации для ограничения доступа; например, идентификатор транспортного средства доставки.

В таблице ниже приведены общие сведения о полях JWT, а также конкретная информация о том, где можно найти значения этих полей в вашем проекте Fleet Engine Cloud.

Поля заголовка JWT

Поле

Описание

алг

Используемый алгоритм: `RS256`.

тип

Тип токена: `JWT`.

ребенок

Идентификатор закрытого ключа вашей учетной записи службы. Это значение можно найти в поле private_key_id файла JSON вашей учетной записи службы. Убедитесь, что вы используете ключ из учетной записи службы с соответствующим уровнем прав доступа.

JWT заявляет о наличии полей

Поле

Описание

ис

Адрес электронной почты вашей учетной записи службы, указанный в поле client_email файла JSON вашей учетной записи службы.

субтитры

Адрес электронной почты вашей учетной записи службы, указанный в поле client_email файла JSON вашей учетной записи службы.

аудитор

SERVICE_NAME вашей учетной записи службы, в данном случае https://fleetengine.googleapis.com/

иат

Временная метка создания JWT, указанная в секундах, прошедших с 00:00:00 UTC, January 1, 1970 . Допускается отклонение на 10 минут. Если временная метка слишком сильно смещена в прошлое или будущее, сервер может сообщить об ошибке.

эксп

Временная метка, по которой истекает срок действия JWT, указывается в секундах, прошедших с 00:00:00 UTC, January 1, 1970 . Запрос не выполняется, если временная метка отстает более чем на один час.

авторизация

В зависимости от сценария использования, может содержать deliveryvehicleid , trackingid , taskid или taskids .

При указании идентификаторов задач область авторизации должна представлять собой массив в одном из следующих форматов:

"taskids": ["task_id_one","task_id_two"]

или

"taskids": ["*"]

Компания Fleet Engine JWT заявляет

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

Например, когда ваш сервер выдает JSON Web Token для мобильного устройства водителя, он должен содержать либо поле vehicleid , либо поле deliveryvehicleid со значением идентификатора транспортного средства этого водителя. Затем, в зависимости от роли водителя, JWT предоставляют доступ только для конкретного идентификатора транспортного средства, а не для любого другого произвольного идентификатора транспортного средства.

Fleet Engine использует следующие частные права доступа:

Поездки по запросу

  • vehicleid :
    • В Driver SDK это утверждение всегда используется, независимо от того, выполняется ли операция в рамках поездки или с использованием транспортного средства. Бэкенд Fleet Engine гарантирует, что транспортное средство связано с запрошенной поездкой, прежде чем вносить изменения.
    • JWT может охватывать как операции с транспортными средствами, так и операции во время поездок, даже если это не является обязательным, что может упростить внедрение системы подписания JWT.
  • tripid :
    • В потребительском SDK всегда используется это утверждение.
    • JWT может охватывать как операции с транспортными средствами, так и операции с поездками, даже если это не требуется, что может упростить реализацию подписи токенов.

Запланированные задачи

  • deliveryvehicleid

    Используйте при вызове API для каждого транспортного средства доставки.

  • taskid

    Используйте при вызове API для отдельных задач.

  • taskids

    Используйте при вызове BatchCreateTasksAPI . Это утверждение должно быть в виде массива, и массив должен содержать все идентификаторы задач, необходимые для выполнения запроса. Не включайте утверждения delivervehicleid , trackingid или taskid .

  • trackingid

    Используйте при вызове GetTaskTrackingInfoAPI . Утверждение должно соответствовать идентификатору отслеживания в запросе. Не включайте утверждения delivervehicleid , taskid или taskids .

Что дальше?