JSON Web 令牌

JSON Web 令牌 (JWT) 是一种开放式 Web 标准,用于对客户端和服务器之间的信息交换进行身份验证和授权。当应用用户首次使用适当的角色凭据登录时,服务器会创建并返回经过编码和数字签名的 JWT,以供后续请求使用。此过程既会对用户进行身份验证,也会根据用户的账号角色授权其访问路线、服务和资源。

Fleet Engine 要求使用 JSON Web 令牌 (JWT) 从 低信任环境 (智能手机和浏览器)调用 API 方法。

JWT 源自您的服务器,经过签名、加密并传递给客户端,以供后续服务器交互使用,直到过期或失效为止。

重要详细信息

与 API 密钥不同,JWT 的有效期较短,并且仅限于角色获授权执行的操作。如需详细了解 JWT,请参阅 维基百科上的 JSON Web 令牌。如需详细了解访问角色,请参阅本指南中的 服务账号角色

JWT 元素

JWT 包含标头和声明部分。标头部分包含从服务账号获取的私钥和加密算法等信息。声明部分包含 JWT 的创建时间、存留时间 (TTL)、JWT 声明访问的服务以及其他授权信息(用于限定访问范围),例如配送车辆 ID。

下表提供了有关 JWT 字段的描述性详细信息,以及有关在 Fleet Engine 云项目 中查找这些字段值的具体信息。

JWT 标头字段

字段

说明

alg

要使用的算法。`RS256`。

typ

令牌的类型。`JWT`。

kid

服务账号的私钥 ID。您可以在服务账号 JSON 文件的 private_key_id 字段中找到此值。请务必使用具有正确权限级别的服务账号中的密钥。

JWT 声明字段

字段

说明

iss

服务账号的电子邮件地址,可在服务账号 JSON 文件的 client_email 字段中找到。

sub

服务账号的电子邮件地址,可在服务账号 JSON 文件的 client_email 字段中找到。

aud

服务账号的 SERVICE_NAME, 在本例中为 https://fleetengine.googleapis.com/

iat

JWT 的创建时间戳,以自 00:00:00 UTC, January 1, 1970 起经过的秒数 指定。允许 10 分钟偏差。 如果时间戳过于久远或过于超前, 服务器可能会报告错误。

exp

JWT 的到期时间戳,以自 00:00:00 UTC, January 1, 1970 起经过的秒数指定 。如果时间戳超过一小时,请求将失败。

authorization

根据用例,可能包含 deliveryvehicleidtrackingidtaskidtaskids

如果指定 taskids,授权范围必须采用以下形式之一的数组:

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

"taskids": ["*"]

Fleet Engine JWT 声明

Fleet Engine 使用私有声明。使用私有声明可确保只有获授权的客户端才能访问自己的数据。

例如,当您的服务器为司机的移动 设备颁发 JSON Web 令牌时,该令牌应包含 vehicleid 声明或 deliveryvehicleid 声明,并包含该司机的车辆 ID 值。然后,根据司机角色,JWT 仅允许访问特定的车辆 ID,而不允许访问任何其他任意车辆 ID。

Fleet Engine 使用以下私有声明:

按需行程

  • vehicleid
    • 无论是在行程 还是车辆上运行,Driver SDK 始终使用此声明。Fleet Engine 后端会先确保车辆与所请求的行程 相关联,然后再进行修改。
    • JWT 可以涵盖车辆和行程操作,即使不是必需的,这也可以简化 JWT 签名实现。
  • tripid
    • Consumer SDK 始终使用此声明。
    • JWT 可以涵盖车辆和行程操作, 即使不是必需的,这也可以简化令牌签名 实现。

计划任务

  • deliveryvehicleid

    在调用按配送车辆 API 时使用。

  • taskid

    在调用按任务 API 时使用。

  • taskids

    在调用 BatchCreateTasksAPI 时使用。此声明必须采用数组形式, 并且该数组应包含完成请求所需的所有任务 ID。请勿包含 delivervehicleidtrackingidtaskid 声明。

  • trackingid

    在调用 GetTaskTrackingInfoAPI 时使用。该声明必须与请求中的跟踪 ID 相匹配。请勿包含 delivervehicleidtaskidtaskids 声明。

后续步骤