Mã thông báo là gì?
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 để tương tác với máy chủ sau đó 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 đối với Fleet Engine.
- Sử dụng tài khoản dịch vụ phù hợp để ký JWT. Xem các vai trò serviceaccount của Fleet Engine trong phần Kiến thức cơ bản về Fleet Engine.
Để biết thêm thông tin về Mã thông báo web JSON, hãy xem phần Mã thông báo web JSON trong Fleet Engine Essentials.
Làm cách nào để ứng dụng nhận được mã thông báo?
Sau khi người lái xe hoặc người tiêu dùng đăng nhập vào ứng dụng của bạn bằng thông tin uỷ quyền thích hợp, mọi nội dung cập nhật được phát hành từ thiết bị đó phải sử dụng mã thông báo uỷ quyền thích hợp, mã thông báo này sẽ thông báo cho Fleet Engine về các quyền của ứng dụng.
Là nhà phát triển, quá trình triển khai ứng dụng khách của bạn phải có khả năng thực hiện những việc sau:
- Tìm nạp mã thông báo web JSON từ máy chủ của bạn.
- Sử dụng lại mã thông báo cho đến khi mã này hết hạn để giảm thiểu số lần làm mới mã thông báo.
- Làm mới mã thông báo khi mã này hết hạn.
Lớp AuthTokenFactory
tạo mã thông báo uỷ quyền tại thời điểm cập nhật vị trí. SDK phải đóng gói mã thông báo cùng với thông tin cập nhật để gửi đến Fleet Engine. Đảm bảo rằng chế độ triển khai phía máy chủ của bạn có thể phát hành mã thông báo trước khi khởi chạy SDK.
Để biết thông tin chi tiết về các mã thông báo mà dịch vụ Fleet Engine dự kiến, hãy xem phần Phát hành mã thông báo web JSON cho Fleet Engine.
Ví dụ về trình tìm nạp mã uỷ quyền
Dưới đây là một quy trình triển khai khung của AuthTokenFactory
:
class JsonAuthTokenFactory implements AuthTokenFactory {
private String vehicleServiceToken; // initially null
private long expiryTimeMs = 0;
private String vehicleId;
// This method is called on a thread whose only responsibility is to send
// location updates. Blocking is OK, but just know that no location updates
// can occur until this method returns.
@Override
public String getToken(AuthTokenContext authTokenContext) {
String vehicleId = requireNonNull(context.getVehicleId());
if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
// The token has expired, go get a new one.
fetchNewToken(vehicleId);
}
return vehicleServiceToken;
}
private void fetchNewToken(String vehicleId) {
String url = "https://yourauthserver.example/token/" + vehicleId;
try (Reader r = new InputStreamReader(new URL(url).openStream())) {
com.google.gson.JsonObject obj
= com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();
// The expiry time could be an hour from now, but just to try and avoid
// passing expired tokens, we subtract 10 minutes from that time.
expiryTimeMs -= 10 * 60 * 1000;
this.vehicleId = vehicleId;
} catch (IOException e) {
// It's OK to throw exceptions here. The StatusListener you passed to
// create the DriverContext class will be notified and passed along the failed
// update warning.
throw new RuntimeException("Could not get auth token", e);
}
}
}
Hoạt động triển khai cụ thể này sử dụng ứng dụng HTTP Java tích hợp sẵn để tìm nạp mã thông báo ở định dạng JSON từ máy chủ uỷ quyền. Ứng dụng sẽ lưu mã thông báo để sử dụng lại và tìm nạp lại mã thông báo nếu mã thông báo cũ còn 10 phút nữa là hết hạn.
Quy trình triển khai của bạn có thể thực hiện các thao tác khác, chẳng hạn như sử dụng một luồng nền để làm mới mã thông báo.
Để biết các thư viện ứng dụng hiện có cho Fleet Engine, hãy xem phần Thư viện ứng dụng cho các dịch vụ chuyến đi theo yêu cầu.