JSON Web 令牌

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

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

JWT 源自您的服务器,经过签名和加密,并传递给客户端以进行后续服务器交互,直到它过期或不再有效。

重要详细信息

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

JWT 元素

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

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

JWT 标头字段

字段

说明

alg

要使用的算法。`RS256`。

typ

令牌类型。`JWT`。

儿童

服务账号的私钥 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 以来经过的秒数。如果时间戳是 1 小时以后的时间,则请求会失败。

授权

根据应用场景,可能包含 deliveryvehicleid、trackingid、taskid 或 taskids。

如果指定 taskid,则授权范围必须是以下形式之一的数组:

"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

    在调用 Tasks API 时使用。

  • taskids

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

  • trackingid

    在调用 GetTaskTrackingInfoAPI 时使用。该声明必须与请求中的跟踪 ID 一致。请勿添加 delivervehicleid、taskid 或 taskids 声明。

后续步骤