Веб-токены JSON

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

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

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/

iat

Временная метка создания 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-веб-токен для мобильного устройства водителя, он должен содержать либо утверждение vehicleid , либо утверждение deliveryvehicleid со значением идентификатора транспортного средства этого водителя. Тогда, в зависимости от роли водителя, JWT разрешают доступ только к конкретному идентификатору транспортного средства, а не к любому другому произвольному идентификатору транспортного средства.

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

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

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

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

  • deliveryvehicleid

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

  • taskid

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

  • taskids

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

  • trackingid

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

Что дальше?