Nhận mã thông báo uỷ quyền

Mã thông báo là gì?

Đối với các lệnh gọi phương thức API từ môi trường tin cậy thấp, Fleet Engine yêu cầu bạn sử dụng Mã thông báo web JSON (JWT) được ký bằng một tài khoản dịch vụ thích hợp. Môi trường có mức độ 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, đây là một môi trường hoàn toàn đáng tin cậy. JWT được ký, mã hoá và truyền đến máy khách cho các 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ệ.

Phần phụ trợ của bạn phải xác thực và uỷ quyền cho Công cụ của đội xe bằng cách sử dụng cơ chế Thông tin xác thực mặc định của ứng dụng tiêu chuẩn. Hãy nhớ sử dụng JWT đã được một tài khoản dịch vụ thích hợp ký. Để biết danh sách các vai trò trong tài khoản dịch vụ, hãy xem các vai trò tài khoản dịch vụ Fleet Engine trong phần Fleet Engine cơ bản.

Ngược lại, phần phụ trợ của bạn phải xác thực và uỷ quyền đối với Công cụ của đội xe bằng cách sử dụng các cơ chế Thông tin xác thực mặc định của ứng dụng tiêu chuẩn.

Để biết thêm thông tin về Mã thông báo web JSON, hãy xem Mã thông báo web JSON trong Fleet Engine Essentials.

Khách hàng nhận mã thông báo bằng cách nào?

Sau khi người lái xe hoặc người dùng đăng nhập vào ứng dụng của bạn bằng thông tin xác thực uỷ quyền thích hợp, mọi bản cập nhật 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 Công cụ quản lý đội xe về các quyền cho ứng dụng.

Là nhà phát triển, bạn phải triển khai ứng dụng sao cho có thể 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ã đó hết hạn để giảm thiểu việc 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 các mã thông báo bằng thông tin cập nhật để gửi đến Công cụ của đội xe. Hãy đảm bảo rằng quá trình 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ụ Công cụ của đội xe dự kiến, hãy xem phần Phát hành mã thông báo web JSON cho Công cụ của đội xe.

Ví dụ về trình tìm nạp mã thông báo uỷ quyền

Dưới đây là cách 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);
    }
  }
}

Phương thức 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 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ũ nằm trong vòng 10 phút kể từ thời gian hết hạn.

Cách triển khai của bạn có thể khác, chẳng hạn như sử dụng luồng trong 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 Công cụ của đội xe, hãy xem bài viết Thư viện ứng dụng cho dịch vụ tác vụ được lên lịch.

Bước tiếp theo

Khởi chạy SDK trình điều khiển