Trước khi sử dụng thư viện theo dõi đội xe JavaScript, hãy đảm bảo rằng bạn đã làm quen và thiết lập Fleet Engine. Để biết thông tin chi tiết, hãy xem Fleet Engine.
Tài liệu này trình bày cách bật tính năng uỷ quyền giữa ứng dụng trang web và Fleet Engine. Sau khi thiết lập các yêu cầu của bạn đối với Fleet Engine bằng mã thông báo uỷ quyền chính xác, bạn sẽ sẵn sàng theo dõi một chiếc xe trên bản đồ.
Thiết lập tính năng uỷ quyền
Fleet Engine yêu cầu sử dụng Mã thông báo web JSON (JWT) cho các lệnh gọi phương thức API từ môi trường có độ tin cậy thấp: điện thoại thông minh và trình duyệt.
JWT bắt nguồn từ máy chủ của bạn, được ký, mã hoá và chuyển đến máy khách cho các lượt tương tác tiếp theo với máy chủ cho đến khi hết hạn hoặc không còn hợp lệ.
Thông tin chi tiết quan trọng
- Sử dụng Thông tin xác thực mặc định của ứng dụng để xác thực và uỷ quyền cho Fleet Engine.
- Sử dụng tài khoản dịch vụ thích hợp để ký JWT. Xem vai trò của tài khoản dịch vụ Fleet Engine trong phần Thông tin cơ bản về Fleet Engine.
Tính năng uỷ quyền hoạt động như thế nào?
Tính năng uỷ quyền bằng dữ liệu Fleet Engine bao gồm cả việc triển khai phía máy chủ và phía máy khách.
Uỷ quyền phía máy chủ
Trước khi thiết lập quy trình xác thực và uỷ quyền trong ứng dụng Theo dõi đội xe, máy chủ phụ trợ của bạn phải có khả năng cấp Mã thông báo web JSON cho ứng dụng Theo dõi đội xe để truy cập vào Fleet Engine. Ứng dụng Theo dõi đội xe sẽ gửi các JWT này cùng với yêu cầu của mình để Fleet Engine nhận dạng các yêu cầu là đã xác thực và được uỷ quyền truy cập vào dữ liệu trong yêu cầu. Để biết hướng dẫn về cách triển khai JWT phía máy chủ, hãy xem phần Cấp mã thông báo web JSON trong Thông tin cơ bản về Fleet Engine.
Để tạo mã thông báo từ máy chủ khi triển khai tính năng Theo dõi đội xe, hãy xem các nội dung sau:- Nguyên tắc chung về việc cấp Mã thông báo web JSON, bao gồm các phần dành cho cả chuyến đi theo yêu cầu và nhiệm vụ đã lên lịch
- Chuyến đi theo yêu cầu: Mã thông báo mẫu cho một thao tác trên máy chủ phụ trợ
- Nhiệm vụ đã lên lịch: Mã thông báo mẫu để theo dõi tất cả nhiệm vụ và xe trong đội xe
Uỷ quyền phía máy khách
Khi bạn sử dụng thư viện Theo dõi đội xe JavaScript, thư viện này sẽ yêu cầu mã thông báo từ máy chủ bằng trình tìm nạp mã thông báo uỷ quyền. Thư viện này sẽ thực hiện việc này khi bất kỳ điều kiện nào sau đây đúng:
Không có mã thông báo hợp lệ, chẳng hạn như khi SDK chưa gọi trình tìm nạp khi tải trang mới hoặc khi trình tìm nạp chưa trả về mã thông báo.
Mã thông báo đã hết hạn.
Mã thông báo sắp hết hạn trong vòng một phút.
Nếu không, thư viện Theo dõi đội xe JavaScript sẽ sử dụng mã thông báo hợp lệ đã cấp trước đó và không gọi trình tìm nạp.
Tạo trình tìm nạp mã thông báo uỷ quyền
Tạo trình tìm nạp mã thông báo uỷ quyền theo các nguyên tắc sau:
Trình tìm nạp phải trả về một cấu trúc dữ liệu có 2 trường, được gói trong
Promisenhư sau:Một chuỗi
token.Một số
expiresInSeconds. Mã thông báo sẽ hết hạn sau khoảng thời gian này kể từ khi tìm nạp. Trình tìm nạp mã thông báo xác thực phải chuyển thời gian hết hạn tính bằng giây, kể từ thời điểm tìm nạp đến thư viện như trong ví dụ.
Trình tìm nạp phải gọi một URL trên máy chủ của bạn để truy xuất mã thông báo. URL này (
SERVER_TOKEN_URL) tuỳ thuộc vào cách triển khai phụ trợ của bạn. URL ví dụ sau đây dành cho phụ trợ ứng dụng mẫu trên GitHub:https://SERVER_URL/token/fleet_reader
Ví dụ – Tạo trình tìm nạp mã thông báo uỷ quyền
Các ví dụ sau đây minh hoạ cách tạo trình tìm nạp mã thông báo uỷ quyền:
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,
};
}