Trước khi sử dụng thư viện theo dõi đội xe JavaScript, hãy đảm bảo bạn đã quen thuộc và thiết lập xong Công cụ theo dõi đội xe. Để 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 đến Công cụ quản lý đội xe 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 xe trên bản đồ.
Thiết lập yêu cầu uỷ quyền
Fleet Engine yêu cầu sử dụng Mã thông báo web JSON (JWT) được ký bởi tài khoản dịch vụ thích hợp cho các lệnh gọi phương thức API từ độ tin cậy thấp môi trường. Môi trường đáng tin cậy thấp bao gồm đ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 – một môi trường hoàn toàn đáng tin cậy. JWT được ký, mã hoá và chuyển đến ứng dụng cho các lượt tương tác máy chủ tiếp theo cho đến khi hết hạn hoặc không còn hợp lệ.
Phần phụ trợ của bạn phải xác thực và uỷ quyền dựa trên Fleet Engine bằng cách sử dụng cơ chế Thông tin đăng nhập mặc định của ứng dụng tiêu chuẩn. Nhãn hiệu sử dụng JWT đã được ký bằng một tài khoản dịch vụ thích hợp. Đối với danh sách vai trò trong tài khoản dịch vụ, hãy xem các vai trò trong tài khoản dịch vụ Fleet Engine trong Fleet Engine cơ bản.
Quy trình uỷ quyền hoạt động như thế nào?
Hoạt động uỷ quyền bằng dữ liệu Fleet Engine liên quan đến cả phía máy chủ và phía máy khách trong quá trình triển khai.
Uỷ quyền phía máy chủ
Trước khi bạn thiết lập ủy quyền trong ứng dụng Theo dõi nhóm, phần phụ trợ của bạn phải có khả năng phân phát Mã thông báo web JSON. Bằng cách này, Fleet Engine công nhận các yêu cầu đến từ ứng dụng của bạn là được uỷ quyền truy cập 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át hành mã thông báo web JSON trong Fleet Engine Essentials.
Để tạo mã thông báo từ máy chủ của bạn khi triển khai tính năng Theo dõi nhóm, hãy xem sau:- Nguyên tắc chung về việc phát hành Mã thông báo web JSON, bao gồm cho cả chuyến đi theo yêu cầu và tác vụ đã lên lịch
- Chuyến đi theo yêu cầu: Mã thông báo mẫu cho một hoạt động 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ả các nhiệm vụ và phương tiện trong nhóm xe
Uỷ quyền phía máy khách
Khi bạn sử dụng Thư viện theo dõi nhóm JavaScript, thư viện này sẽ yêu cầu một mã thông báo từ máy chủ bằng cách sử dụng một trình tìm nạp mã thông báo uỷ quyền. Lệnh này thực hiện việc này khi bất kỳ trường hợp nào sau đây xảy ra:
Không có mã thông báo hợp lệ nào, chẳng hạn như khi SDK chưa gọi trình tìm nạp trên một lượt 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ẽ hết hạn trong vòng một phút.
Nếu không, thư viện theo dõi Nhóm JavaScript sẽ sử dụng mã thông báo hợp lệ được phát hành trước đó và có 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ó hai trường, được gói trong một
Promise
như sau:Chuỗi
token
.Số
expiresInSeconds
. Mã thông báo sẽ hết hạn trong khoảng thời gian này sau khi tìm nạp. Trình tìm nạp mã thông báo xác thực phải truyền thời gian hết hạn tính bằng giây, 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
) phụ thuộc vào cách triển khai phần phụ trợ của bạn. Chiến lược phát hành đĩa đơn URL ví dụ sau đây dành cho phần 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,
};
}