Phát hành mã thông báo web JSON

Tài liệu này trình bày cách phát hành Mã thông báo web JSON trong quá trình cho phép ứng dụng web và ứng dụng dành cho thiết bị di động truy cập vào dữ liệu của Công cụ cho xe. Nếu bạn chưa đọc, hãy đọc phần Mã thông báo web JSON trong phần Bảo mật trong Công cụ của Fleet. Với dịch vụ Fleet Engine, bạn có thể đưa ra JWT ở một trong các cách sau:

  • Sử dụng thư viện uỷ quyền – Google khuyên bạn nên sử dụng phương pháp này khi cơ sở mã được viết bằng Java. Thư viện này xử lý việc phát hành JWT cho tất cả các trường hợp sử dụng mà bạn có thể cần đến với dịch vụ và giúp đơn giản hoá quá trình triển khai.
  • Tạo JWT của riêng bạn – Nếu không thể sử dụng thư viện JWT của chúng tôi, bạn sẽ cần phải tạo các JWT này vào cơ sở mã của riêng mình. Phần này cung cấp nhiều ví dụ về JWT cho từng trường hợp.

Cách hoạt động của JWT

Đối với các môi trường không đáng tin cậy, chẳng hạn như điện thoại di động và trình duyệt web, máy chủ phụ trợ của bạn sẽ phát hành JWT hoạt động như sau:

  • Mã ứng dụng khách chạy trong môi trường đáng tin cậy sẽ gọi trên máy chủ của bạn mã chạy trong môi trường đáng tin cậy để yêu cầu JWT phù hợp để truyền đến Fleet Engine.

  • JWT được liên kết với tài khoản dịch vụ, vì vậy, các yêu cầu được gửi đến Công cụ của đội xe sẽ được liên kết ngầm với tài khoản dịch vụ đã ký JWT.

  • JWT tuyên bố hạn chế hơn nữa các tài nguyên mà ứng dụng có thể hoạt động trên đó, chẳng hạn như xe, chuyến đi hoặc nhiệm vụ cụ thể.

Dùng thư viện uỷ quyền cho Java

Để sử dụng thư viện uỷ quyền Fleet Engine cho Java, hãy truy cập vào kho lưu trữ GitHub. Thư viện này giúp đơn giản hoá việc xây dựng Fleet Engine JWT và ký tên một cách an toàn. Đoạn mã này cung cấp những tính năng sau:

  • Khai báo phần phụ thuộc của dự án
  • Danh sách đầy đủ tất cả vai trò của tài khoản dịch vụ cho các chuyến đi theo yêu cầu hoặc các tác vụ theo lịch
  • Cơ chế ký mã thông báo ngoài việc sử dụng tệp thông tin xác thực, chẳng hạn như giả mạo tài khoản dịch vụ
  • Đính kèm mã thông báo đã ký vào các yêu cầu gửi đi được thực hiện từ mã gRPC hoặc thư viện ứng dụng Google API Codegen (GAPIC)
  • Hướng dẫn tích hợp người ký với thư viện ứng dụng Fleet Engine

Nếu bạn đưa ra JWT qua mã

Nếu không thể sử dụng thư viện uỷ quyền cho Java, bạn phải triển khai JWT trong cơ sở mã của riêng bạn. Phần này cung cấp một số nguyên tắc để tự tạo mã thông báo. Xem Mã thông báo web JSON trong phần Bảo mật trong Fleet Engine để xem danh sách các trường và thông báo xác nhận quyền sở hữu JWT. Xem phần Tài khoản dịch vụ các vai trò trong tài khoản dịch vụ mà Fleet Engine sử dụng. Xem phần sau đây để xem danh sách các ví dụ về JWT cho các chuyến đi theo yêu cầu hoặc việc cần làm đã lên lịch.

Nguyên tắc chung

  • Sử dụng tài khoản dịch vụ và vai trò thích hợp. Tài khoản dịch vụ và vai trò liên kết đảm bảo rằng người dùng yêu cầu mã thông báo được uỷ quyền để xem thông tin mà mã thông báo cấp cho họ quyền truy cập. Cụ thể:
    • Nếu ký JWT để truyền đến một thiết bị di động, hãy sử dụng dịch vụ này cho vai trò Người lái xe hoặc SDK Người tiêu dùng. Nếu không, thiết bị di động có thể thay đổi và truy cập vào dữ liệu mà thiết bị không được phép truy cập.
    • Nếu ký JWT để sử dụng cho các cuộc gọi đặc quyền, hãy sử dụng dịch vụ này có vai trò Quản trị viên Fleet Engine chính xác khi sử dụng ADC hoặc JWT. Nếu không, thao tác sẽ không thành công.
  • Chỉ chia sẻ mã thông báo đã tạo. Không bao giờ chia sẻ thông tin đăng nhập được dùng để tạo mã thông báo.
  • Đối với các lệnh gọi gRPC, cơ chế đính kèm mã thông báo sẽ phụ thuộc vào ngôn ngữ và khung được sử dụng để thực hiện lệnh gọi. Cơ chế chỉ định mã thông báo cho lệnh gọi HTTP là bao gồm tiêu đề Authorization cùng với một phương thức mang mã thông báo có giá trị là mã thông báo.
  • Trả về thời gian hết hạn. Máy chủ của bạn phải trả về thời gian hết hạn cho mã, thường tính bằng giây.
  • Nếu bạn cần tạo và ký trực tiếp JSON dưới dạng người mang mã thông báo thay vì sử dụng mã truy cập OAuth 2.0, hãy đọc hướng dẫn về cách Uỷ quyền tài khoản dịch vụ mà không cần OAuth trong tài liệu dành cho Nhà phát triển nhận dạng.

Đối với chuyến đi theo yêu cầu

  • Khi tạo tải trọng JWT, hãy thêm một thông báo xác nhận bổ sung trong phần uỷ quyền bằng cách đặt khoá vehicleid hoặc tripid thành giá trị của mã nhận dạng xe hoặc mã chuyến đi mà lệnh gọi đang được thực hiện.

Đối với việc cần làm đã lên lịch

  • Khi máy chủ của bạn gọi các API khác, mã thông báo cũng phải chứa thông báo xác nhận quyền thích hợp. Đối với trường hợp này, bạn có thể làm như sau:
    • Đặt giá trị của mỗi khoá thành *.
    • Cấp cho người dùng quyền truy cập vào tất cả taskidsdeliveryvehicleids. Để làm điều này, bạn thêm một thông báo xác nhận bổ sung trong phần uỷ quyền bằng các khoá taskiddeliveryvehicleid.
    • Khi sử dụng dấu hoa thị (*) trong thông báo xác nhận quyền sở hữu taskids, dấu hoa thị phải là phần tử duy nhất trong mảng.

Ví dụ về JWT cho các chuyến đi theo yêu cầu

Phần này cung cấp các ví dụ về JWT cho các trường hợp phổ biến nếu bạn sử dụng chuyến đi theo yêu cầu.

Mã thông báo mẫu cho hoạt động của ứng dụng trình điều khiển

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_driver_service_account"
}
.
{
  "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
  "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "driver_12345"
   }
}

Mã thông báo mẫu cho hoạt động của ứng dụng dành cho người tiêu dùng

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_consumer_service_account"
}
.
{
  "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "tripid": "trip_54321"
   }
}

Ví dụ về JWT cho các tác vụ được lên lịch

Phần này cung cấp ví dụ về JWT cho các trường hợp điển hình nếu bạn sử dụng tuỳ chọn cài đặt theo lịch biểu công việc.

Mã thông báo mẫu cho ứng dụng trình điều khiển

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }

Mã thông báo mẫu cho ứng dụng cho người dùng thông thường

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

Ví dụ về JWT cho hoạt động của nhóm thiết bị

Phần này cung cấp ví dụ về JWT cho một tình huống điển hình trong hoạt động đội xe.

Ví dụ về mã thông báo để theo dõi tất cả công việc và xe trong một đội xe

Sau đây là ví dụ về mã thông báo theo dõi tất cả nhiệm vụ và xe trong nhóm thiết bị từ một ứng dụng dựa trên nền tảng web mà nhà vận hành sử dụng. Các quyền cần thiết cho các thao tác này lớn hơn so với các ứng dụng khách. Hãy xem phần Thiết lập Thư viện theo dõi đội xe bằng JavaScript để biết cách triển khai phía máy khách sử dụng mã thông báo này:

  • Ký mã thông báo bằng Cloud IAM của Fleet Engine Delivery Fleet Reader vai trò.

   {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_consumer_service_account"
    }
    .
    {
      "iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "scope": "https://www.googleapis.com/auth/xapi",
      "authorization": {
         "taskid": "*",
         "deliveryvehicleid": "*",
       }
    }

Phương thức xác thực thay thế cho các hoạt động của máy chủ phụ trợ

Bạn nên sử dụng ADC để xác thực hoạt động của máy chủ phụ trợ. Nếu bạn không thể sử dụng ADC và cần sử dụng JWT, hãy tham khảo các ví dụ sau.

Mã thông báo mẫu cho hoạt động của máy chủ phụ trợ theo yêu cầu

  {
    "alg": "RS256",
    "typ": "JWT",
    "kid": "private_key_id_of_provider_service_account"
  }

  {
    "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
    "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
    "aud": "https://fleetengine.googleapis.com/",
    "iat": 1511900000,
    "exp": 1511903600,
    "authorization": {
       "vehicleid": "*",
       "tripid": "*"
     }
  }
  

Mã thông báo mẫu cho một thao tác máy chủ phụ trợ theo lịch

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }
   

Mã thông báo mẫu cho thao tác tạo tác vụ hàng loạt theo lịch trên máy chủ phụ trợ

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }
  

Ví dụ về mã thông báo cho một máy chủ phụ trợ theo lịch hoạt động trên mỗi xe phân phối

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }
  

Các bước tiếp theo

  • Xác minh chế độ thiết lập để bạn có thể tạo xe thử nghiệm và đảm bảo rằng mã thông báo của bạn đang hoạt động như dự kiến
  • Để biết thông tin về việc sử dụng ADC thay vì JWT cho các hoạt động của máy chủ phụ trợ, hãy xem phần Tổng quan về bảo mật.