使用 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 進行驗證及授權。
授權的運作方式為何?
使用 Fleet Engine 資料進行授權時,必須同時在伺服器端和用戶端實作。
伺服器端授權
在設定車隊追蹤應用程式的驗證和授權之前,後端伺服器必須能夠向車隊追蹤應用程式發出 JSON Web 權杖,以便存取車隊引擎。機群追蹤應用程式會將 JWT 連同要求一起傳送,讓 Fleet Engine 將要求視為已驗證並授權存取要求中的資料。如需伺服器端 JWT 實作說明,請參閱「Fleet Engine 重點」一節中的「發出 JSON Web Token」。
如要在實作車隊追蹤時從伺服器產生權杖,請參閱以下說明:- 核發 JSON Web Token 的一般指南,包括隨選行程和排程工作的各節
- 隨選行程:後端伺服器作業的範例權杖
- 排程工作:用於追蹤車隊所有工作和車輛的範例權杖
用戶端授權
使用 JavaScript 機群追蹤程式庫時,系統會透過授權權杖擷取工具向伺服器要求權杖。系統會在符合下列任一條件時執行此動作:
沒有有效的權杖,例如 SDK 未在重新整理頁面時呼叫擷取程式,或是擷取器未傳回權杖時。
權杖已過期。
憑證會在一分鐘內到期。
否則,JavaScript 機群追蹤程式庫會使用先前核發的有效權杖,且不會呼叫擷取程式。
建立授權權杖擷取工具
請按照下列指南建立授權權杖擷取器:
擷取器必須傳回具有兩個欄位的資料結構,並以
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,
};
}