JSON Web 令牌 (JWT) 是一种开放式 Web 标准,用于对客户端和服务器之间的信息交换进行身份验证和授权。当应用用户首次使用适当的角色凭据登录时,服务器会创建并返回经过编码和数字签名的 JWT,以供后续请求使用。此过程既会对用户进行身份验证,也会根据用户的账号角色授权其访问路线、服务和资源。
Fleet Engine 要求使用 JSON Web 令牌 (JWT) 从 低信任环境 (智能手机和浏览器)调用 API 方法。
JWT 源自您的服务器,经过签名、加密并传递给客户端,以供后续服务器交互使用,直到过期或失效为止。
重要详细信息
- 使用 应用默认凭证 针对 Fleet Engine 进行身份验证和 授权。
- 使用适当的服务账号对 JWT 进行签名。请参阅 Fleet Engine 服务账号角色(位于Fleet Engine 基础知识中)。
与 API 密钥不同,JWT 的有效期较短,并且仅限于角色获授权执行的操作。如需详细了解 JWT,请参阅 维基百科上的 JSON Web 令牌。如需详细了解访问角色,请参阅本指南中的 服务账号角色。
JWT 元素
JWT 包含标头和声明部分。标头部分包含从服务账号获取的私钥和加密算法等信息。声明部分包含 JWT 的创建时间、存留时间 (TTL)、JWT 声明访问的服务以及其他授权信息(用于限定访问范围),例如配送车辆 ID。
下表提供了有关 JWT 字段的描述性详细信息,以及有关在 Fleet Engine 云项目 中查找这些字段值的具体信息。
字段 |
说明 |
|---|---|
alg |
要使用的算法。`RS256`。 |
typ |
令牌的类型。`JWT`。 |
kid |
服务账号的私钥 ID。您可以在服务账号 JSON 文件的
|
字段 |
说明 |
|---|---|
iss |
服务账号的电子邮件地址,可在服务账号 JSON 文件的
|
sub |
服务账号的电子邮件地址,可在服务账号 JSON 文件的
|
aud |
服务账号的 |
iat |
JWT 的创建时间戳,以自 00:00:00 |
exp |
JWT 的到期时间戳,以自 |
authorization |
根据用例,可能包含 如果指定 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。请勿包含delivervehicleid、trackingid或taskid声明。 -
trackingid在调用
GetTaskTrackingInfoAPI时使用。该声明必须与请求中的跟踪 ID 相匹配。请勿包含delivervehicleid、taskid或taskids声明。
后续步骤
- 了解 Fleet Engine 安全设计,以了解完整的 身份验证流程。
- 了解如何从服务器颁发 JSON Web 令牌。