本文說明如何在啟用網站時發出 JSON Web Token 和行動應用程式存取 Fleet Engine 資料如果您還沒有這樣做 請閱讀 Fleet Engine 的安全性 部分 JSON Web Token 專區。您可以透過 Fleet Engine 服務,以下列任一方式發出 JWT:
- 使用授權程式庫:如果程式碼集是以 Java 編寫,Google 建議您採用這種方法。這個程式庫會針對您可能需要使用服務的所有用途情境,處理 JWT 核發作業,並大幅簡化實作程序。
- 建立自己的 JWT:如果無法使用我們的 JWT 程式庫,您將需要 並建構到自己的程式碼集中本節將介紹 各種情境的 JWT 範例。
JWT 的運作方式
對於行動電話和網路瀏覽器等不受信任的環境,後端伺服器會發出 JWT,運作方式如下:
在伺服器上的低信任環境呼叫中執行的用戶端程式碼 程式碼,以要求適當的 JWT 運作 並傳遞至 Fleet Engine
JWT 與服務帳戶相關聯,因此要求傳送至 Fleet Engine 會與簽署 JWT 的服務帳戶隱含關聯。
JWT 憑證附加資訊會進一步限制用戶端可能在其中操作的資源, 例如特定車輛、行程或工作
使用 Java 專用的授權程式庫
如要使用 Java 適用的 Fleet Engine 授權程式庫,請造訪 GitHub 存放區這個程式庫可簡化 Fleet Engine JWT 的建構作業,並安全簽署這些 JWT。提供以下功能:
- 專案依附元件宣告
- 隨選行程或所有服務帳戶角色的完整清單 排定的工作
- 使用憑證檔案以外的權杖簽署機制,例如模擬服務帳戶
- 將簽署權杖附加至從 gRPC 虛設常式或 Google API Codegen (GAPIC) 用戶端程式庫
- 整合簽署人與 Fleet Engine 用戶端程式庫的操作說明
如果您是透過程式碼發布 JWT
如果無法使用 Java 的授權程式庫,則必須在 您自己的程式碼集本節提供幾項建立 符記如需 JWT 欄位和憑證清單,請參閱「Fleet Engine 中的安全性」一節中的「JSON Web Token」。請參閱服務帳戶 角色。詳情請見 下一節提供隨選行程或 JWT 範例 排程工作
一般指南
- 使用適當的服務帳戶和角色。服務帳戶和相關角色可確保要求權杖的使用者有權查看權杖授予存取權的資訊。詳細說明:
- 如果要簽署要傳遞至行動裝置的 JWT,請使用 Driver 或 Consumer SDK 角色的服務帳戶。否則,行動裝置可能會變更及存取不應存取的資料。
- 如果簽署用於特殊權限呼叫的 JWT,請使用服務 帳戶,且具備正確的 Fleet Engine 管理員角色。 否則,操作會失敗。
- 隻共用已建立的權杖。絕不向他人透露 建立符記
- 如果是 gRPC 呼叫,附加憑證的機制取決於
以及用於發出呼叫的語言和架構用來指定
則是在 HTTP 呼叫中加入
Authorization
標頭 符記,其值為符記 - 傳回到期時間。您的伺服器必須針對 通常以秒為單位
- 若您需要直接將 JSON 做為符記不記名來建立並簽署,則 而不要使用 OAuth 2.0 存取權杖,請參閱「服務」 帳戶授權 (不使用 OAuth) 開發人員說明文件。
隨選行程適用
- 建立 JWT 酬載時,請在授權部分新增額外的要求,將鍵
vehicleid
或tripid
設為呼叫的車輛 ID 或行程 ID 值。
適用於已排定的工作
- 伺服器呼叫其他 API 時,權杖也必須包含
適當的聲明。做法如下:
- 將每個鍵的值設為
*
。 - 授予使用者所有
taskids
和deliveryvehicleids
的存取權。待辦 您必須在授權區塊中, 索引鍵taskid
和deliveryvehicleid
。 - 在
taskids
要求中使用星號 (*
) 時,星號必須是陣列中唯一的元素。
- 將每個鍵的值設為
隨選行程的 JWT 範例
如果您採用隨選即用程序,則本節提供常見情境的 JWT 範例 行程。
驅動程式應用程式作業的權杖範例
{
"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_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"
}
}
機群作業的 JWT 範例
本節提供適用於機群作業一般情境的 JWT 範例。
用於追蹤機群所有任務和車輛的權杖範例
以下範例是憑證,可追蹤 網路型應用程式的機群必要權限 比起用戶端應用程式,處理這些作業的效果更好詳情請見 為用戶端設定 JavaScript 機群追蹤程式庫 會使用此權杖的實作:
使用 Cloud IAM 簽署權杖:
Fleet Engine Delivery Fleet Reader
角色。
{
"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": "*",
}
}
後端伺服器作業的替代驗證方式
Google 建議您使用 ADC 來驗證後端伺服器作業。如果 無法使用 ADC 且必須使用 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_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": "*" } }