JSON Web Token (JWT) — это открытый веб-стандарт, используемый для аутентификации и авторизации обмена информацией между клиентом и сервером. Когда пользователь приложения впервые входит в систему с учётными данными соответствующей роли, сервер создаёт и возвращает закодированный JWT с цифровой подписью для использования в последующих запросах. Этот процесс одновременно аутентифицирует пользователя и предоставляет ему доступ к маршрутам, сервисам и ресурсам в зависимости от его роли учётной записи.
Fleet Engine требует использования JSON Web Tokens (JWT) для вызовов методов API из сред с низким уровнем доверия : смартфонов и браузеров.
JWT создается на вашем сервере, подписывается, шифруется и передается клиенту для последующих взаимодействий с сервером до тех пор, пока не истечет срок его действия или он не станет недействительным.
Ключевые детали
- Используйте учетные данные приложения по умолчанию для аутентификации и авторизации в Fleet Engine.
- Используйте соответствующую учетную запись службы для подписи JWT. См. роли учетных записей службы Fleet Engine в разделе Основы Fleet Engine .
В отличие от ключей API, JWT имеют короткий срок действия и ограничивают выполнение только тех операций, которые разрешены для данной роли. Подробнее о JWT см. в разделе «JSON Web Tokens» в Википедии. Подробнее о ролях доступа см. в разделе «Роли учётных записей служб» в этом руководстве.
Элементы JWT
JWT содержат заголовок и раздел заявок. Раздел заявок содержит такую информацию, как закрытый ключ, полученный от учётных записей служб, и алгоритм шифрования. Раздел заявок содержит такую информацию, как время создания JWT, время его существования, сервисы, к которым JWT запрашивает доступ, и другую информацию об авторизации, определяющую область доступа, например, идентификатор транспортного средства доставки.
В следующей таблице приведены общие сведения о полях JWT, а также конкретная информация о том, где можно найти значения этих полей в вашем проекте Fleet Engine Cloud.
Поле | Описание |
---|---|
алг | Алгоритм для использования. `RS256`. |
тип | Тип токена. `JWT`. |
ребенок | Идентификатор закрытого ключа вашей учётной записи службы. Это значение можно найти в поле |
Поле | Описание |
---|---|
исс | Адрес электронной почты вашей учетной записи службы, указанный в поле |
суб | Адрес электронной почты вашей учетной записи службы, указанный в поле |
ауд | |
iat | Временная метка создания JWT, указанная в секундах, прошедших с 00:00:00 |
опыт | Временная метка истечения срока действия JWT, указанная в секундах |
разрешение | В зависимости от варианта использования может содержать При указании идентификаторов задач область авторизации должна быть массивом в одной из следующих форм: "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
.
Что дальше?
- Ознакомьтесь с проектированием системы безопасности Fleet Engine, чтобы понять весь процесс аутентификации.
- Узнайте, как выдавать JSON Web Tokens со своего сервера.