本文說明如何核發 JSON Web Token,以便讓網頁和行動應用程式存取 Fleet Engine 資料。如果您尚未閱讀「Fleet Engine 的安全性」一節中的「JSON Web 權杖」,請先閱讀該節內容。使用 Fleet Engine 服務時,您可以透過下列任一方式核發 JWT:
- 使用授權程式庫:如果程式碼集是以 Java 編寫,Google 建議您採用這種做法。這個程式庫會處理服務可能需要的所有用途情境,並大幅簡化實作程序。
- 自行建立 JWT:如果無法使用我們的 JWT 程式庫,您必須將這些程式庫建構至自己的程式碼集。本節提供各情境的 JWT 範例。
JWT 的運作方式
對於不受信任的環境 (例如手機和網路瀏覽器),後端伺服器會發出 JWT,運作方式如下:
在低信任環境中執行的用戶端程式碼,會呼叫在完全信任環境中執行的伺服器程式碼,要求適當的 JWT 傳遞至 Fleet Engine。
JWT 與服務帳戶相關聯,因此傳送至 Fleet Engine 的要求會隱含地與簽署 JWT 的服務帳戶建立關聯。
JWT 聲明會進一步限制用戶端可執行的資源,例如特定車輛、行程或工作。
使用 Java 授權程式庫
如要使用 Java 適用的 Fleet Engine 授權程式庫,請前往 GitHub 存放區。這個程式庫可簡化 Fleet Engine JWT 的建構作業,並安全地簽署。這項服務提供以下功能:
- 專案依附元件宣告
- 隨選行程或排定工作的所有服務帳戶角色完整清單
- 使用憑證檔案以外的權杖簽署機制,例如模擬服務帳戶
- 將已簽署的權杖附加至透過 gRPC 存根或 Google API Codegen (GAPIC) 用戶端程式庫發出的外送要求
- 將簽署工具與 Fleet Engine 用戶端程式庫整合的操作說明
如果透過程式碼核發 JWT
如果您無法使用 Java 授權程式庫,則必須在自己的程式碼集中導入 JWT。本節提供一些建立專屬權杖的指南。如需 JWT 欄位和宣告清單,請參閱「Fleet Engine 的安全性」一節中的「JSON Web Token」。如要瞭解 Fleet Engine 使用的服務帳戶角色,請參閱「服務帳戶角色」。如需隨選行程或預約行程的 JWT 範例清單,請參閱下一節。
一般指南
- 使用適當的服務帳戶和角色。服務帳戶和相關聯的角色可確保要求權杖的使用者有權查看權杖授予的資訊。具體問題包括:
- 如要簽署 JWT 並傳遞至行動裝置,請使用 Driver 或 Consumer SDK 角色的服務帳戶。否則,行動裝置可能會變更或存取不應存取的資料。
- 如要簽署用於特殊權限呼叫的 JWT,請在使用 ADC 或 JWT 時,使用具備正確 Fleet Engine 管理員角色的服務帳戶。否則作業會失敗。
- 僅分享建立的權杖。切勿分享用於建立權杖的憑證。
- 如果是 gRPC 呼叫,附加權杖的機制取決於發出呼叫時使用的語言和架構。如要為 HTTP 呼叫指定權杖,請加入
Authorization標頭,並以不記名權杖做為值。 - 傳回有效期限。伺服器必須傳回權杖的到期時間,通常以秒為單位。
- 如需直接建立及簽署 JSON 做為權杖持有人,而非使用 OAuth 2.0 存取權杖,請參閱 Identity 開發人員說明文件中的「不使用 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 車隊追蹤程式庫」:
使用
Fleet Engine Delivery Fleet ReaderCloud 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": "*",
}
}
後端伺服器作業的其他驗證方式
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": "*" } }