使用 JavaScript 車隊追蹤程式庫前,請先熟悉並設定 Fleet Engine。詳情請參閱 Fleet Engine。
本文說明如何啟用網頁應用程式與 Fleet Engine 之間的授權。使用正確的授權權杖設定 Fleet Engine 要求後,您就可以在地圖上追蹤車輛。
設定授權
從低信任度環境 (智慧型手機和瀏覽器) 呼叫 API 方法時,Fleet Engine 必須使用 JSON Web Token (JWT)。
JWT 會在伺服器上產生、簽署、加密,並傳遞至用戶端,以供後續伺服器互動使用,直到 JWT 過期或失效為止。
重要詳細資料
- 使用應用程式預設憑證向 Fleet Engine 進行驗證和授權。
- 使用適當的服務帳戶簽署 JWT。請參閱「Fleet Engine 基礎知識」一文中的「Fleet Engine 服務帳戶角色」。
授權的運作方式
授權使用 Fleet Engine 資料時,需要同時實作伺服器端和用戶端。
伺服器端授權
在車隊追蹤應用程式中設定驗證和授權之前,後端伺服器必須能向車隊追蹤應用程式核發 JSON 網頁權杖,以存取 Fleet Engine。您的車隊追蹤應用程式會在要求中傳送這些 JWT,讓 Fleet Engine 將要求視為經過驗證,並授權存取要求中的資料。如需伺服器端 JWT 實作的操作說明,請參閱「Fleet Engine 基礎知識」下的「核發 JSON Web Token」。
如要在導入車隊追蹤功能時從伺服器產生權杖,請參閱下列內容:- 發行 JSON Web Token 的一般規範,包括隨選行程和排定工作兩節
- 隨選行程:後端伺服器作業的範例權杖
- 排定的工作:追蹤車隊中所有工作和車輛的範例權杖
用戶端授權
使用 JavaScript Fleet 追蹤程式庫時,系統會透過授權權杖擷取器向伺服器要求權杖。在符合下列任一條件時,系統就會執行這項操作:
- 沒有有效的權杖,例如 SDK 尚未在重新載入的網頁上呼叫擷取器,或是擷取器尚未傳回權杖。 
- 權杖已過期。 
- 權杖即將在 1 分鐘內過期。 
否則,JavaScript Fleet 追蹤程式庫會使用先前發布的有效權杖,且不會呼叫擷取器。
建立授權權杖擷取器
請按照下列規範建立授權權杖擷取器:
- 擷取器必須傳回具有兩個欄位的資料結構,並以 - Promise包裝,如下所示:- 字串 - token。
- 數字 - expiresInSeconds。權杖會在擷取後經過這段時間後失效。驗證權杖擷取器必須將擷取時間 (以秒為單位) 傳遞至程式庫,如範例所示。
 
- 擷取器應呼叫伺服器上的網址,以擷取權杖。這個網址 ( - SERVER_TOKEN_URL) 取決於後端實作方式。以下範例網址適用於 GitHub 上的範例應用程式後端:- https://SERVER_URL/token/fleet_reader
 
範例 - 建立授權權杖擷取器
下列範例說明如何建立授權權杖擷取器:
JavaScript
async function authTokenFetcher(options) {
  // options is a record containing two keys called
  // serviceType and context. The developer should
  // generate the correct SERVER_TOKEN_URL and request
  // based on the values of these fields.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.Token,
    expiresInSeconds: data.ExpiresInSeconds
  };
}
TypeScript
function authTokenFetcher(options: {
  serviceType: google.maps.journeySharing.FleetEngineServiceType,
  context: google.maps.journeySharing.AuthTokenContext,
}): Promise<google.maps.journeySharing.AuthToken> {
  // The developer should generate the correct
  // SERVER_TOKEN_URL based on options.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.token,
    expiresInSeconds: data.ExpiresInSeconds,
  };
}