本文档介绍了在启用 Web 的过程中如何颁发 JSON Web 令牌 和移动应用可访问 Fleet Engine 数据。如果您还没有这样做 请阅读舰队引擎中的安全性下的 JSON Web 令牌 部分。借助 Fleet Engine 服务,您可以使用以下任一种方式颁发 JWT 方法:
- 使用授权库:Google 建议您在遇到以下情况时使用此方法: 您的代码库是用 Java 编写的。该库负责为所有 应用场景,并极大地简化您的 实施。
- 创建自己的 JWT - 如果您无法使用我们的 JWT 库,则需要 将这些代码构建到您自己的代码库中。本部分提供了各种示例 每个场景的 JWT 数量。
使用适用于 Java 的授权库
要使用适用于 Java 的 Fleet Engine 授权库,请访问 GitHub 代码库。该库简化了 Fleet Engine 的构建 JWT 并对其进行安全签名。它提供以下功能:
- 项目依赖项声明
- 按需行程或已安排行程的所有服务账号角色的完整列表 tasks
- 令牌签名机制(而非使用凭据文件),例如 模拟服务账号
- 将已签名的令牌附加到通过 gRPC 桩或 GAPIC 客户端
- 将签名者与 Fleet Engine 客户端库集成的说明
如果您通过代码颁发 JWT
如果您无法使用 Java 版授权库,则必须实现 JWT 构建自己的代码库。本部分提供了一些有关如何创建 自己的令牌。请参阅 Fleet Engine 中的安全性下的 JSON Web 令牌 部分。请参阅 以下部分列出了按需行程或 计划任务。
常规指南
- 使用适当的角色。这样可以确保请求令牌的用户
有权查看该令牌授予他们访问权限的信息。
具体而言:
- 在对要传递给移动设备的 JWT 进行签名时,请使用该服务 账号。否则, 设备将能够更改不应具有的状态。
- 同样,在对用于特权调用的 JWT 进行签名时,请确保 确保 使用具有正确 Fleet Engine Admin 角色的服务账号。 否则,操作将失败。
- 仅共享创建的令牌。切勿向他人透露 创建令牌。
- 对于 gRPC 调用,附加令牌的机制取决于
用于进行调用的语言和框架。用于指定
添加带有不记名的
Authorization
标头 词元,其值是该词元。 - 返回过期时间。您的服务器必须针对 令牌,通常在几秒内完成。
- 直接作为令牌不记名创建 JSON 并为其签名,而不是使用 OAuth 2.0 访问令牌,请阅读服务账号说明 Identity Developer Console 中的“无需 OAuth 授权”功能 文档。
按需行程
- 创建 JWT 载荷时,请在授权中添加额外的声明
键为
vehicleid
或tripid
的部分设置为车辆的值 为其发出调用的 ID 或行程 ID。
对于计划任务
- 当您的服务器调用其他 API 时,这些令牌还必须包含
适当的声明。为此,您可以执行以下操作:
<ph type="x-smartling-placeholder">
- </ph>
- 将每个键的值设置为
*
。 - 授予该用户对所有
taskids
和deliveryvehicleids
的访问权限。待办事项 您需要在“授权”部分再添加一个声明, 键taskid
和deliveryvehicleid
。 - 在
taskids
声明中使用星号 (*
) 时,它必须是 数组中的唯一元素。
- 将每个键的值设置为
按需行程的 JWT 示例
本部分提供了适用于按需结算常见场景的 JWT 示例 行程。
用于后端服务器操作的令牌示例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "*",
"tripid": "*"
}
}
用于驱动程序应用操作的令牌示例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "driver_12345"
}
}
用于消费者应用操作的令牌示例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"tripid": "trip_54321"
}
}
计划任务的 JWT 示例
本部分提供 JWT 示例,适用于使用 任务。
用于后端服务器操作的令牌示例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"taskid": "*"
}
}
用于后端服务器批量创建任务操作的令牌示例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"taskids": ["*"]
}
}
用于后端服务器按交付车辆操作的示例令牌
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"deliveryvehicleid": "*"
}
}
驱动程序应用的令牌示例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"deliveryvehicleid": "driver_12345"
}
}
消费者应用的示例令牌
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"trackingid": "shipment_12345"
}
}
用于跟踪所有任务和车辆的示例令牌
以下示例是一个令牌,用于跟踪所有任务和 车辆数量。请参阅设置 JavaScript 舰队跟踪库 对于将使用此令牌的客户端实现:
使用
Fleet Engine Delivery Fleet Reader
Cloud IAM 角色对令牌进行签名。
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
"sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"scope": "https://www.googleapis.com/auth/xapi",
"authorization": {
"taskid": "*",
"deliveryvehicleid": "*",
}
}
后续步骤
- 验证您的设置,以便创建试用车辆,并确保 令牌工作正常