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 kích hoạt trang web và các ứng dụng dựa trên thiết bị di động vào dữ liệu của Fleet Engine. Nếu bạn chưa thực hiện đã đọc Mã thông báo web JSON trong phần Bảo mật trong Fleet Engine . 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ủa bạn đượ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à đơn giản hoá đáng kể trong 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ẽ phải tạo các mã này vào cơ sở mã của riêng bạn. Phần này cung cấp nhiều ví dụ JWT cho từng trường hợp.

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 GitHub kho lưu trữ. 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ả các vai trò trong tài khoản dịch vụ cho các chuyến đi theo yêu cầu hoặc theo lịch việc cần làm
  • 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ư mạo danh 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 ứng dụng 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ã

Khi 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 vài nguyên tắc để tạo mã thông báo riêng. Xem Mã thông báo web JSON trong phần Bảo mật trong Fleet Engine để xem danh sách các vai trò của tài khoản dịch vụ, các trường JWT và thông báo xác nhận quyền sở hữu. 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 vai trò thích hợp. Việc này đả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ể:
    • Khi ký JWT được 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 thiết bị sẽ có khả năng thay đổi trạng thái không nên có.
    • Tương tự, khi ký JWT để sử dụng cho các lệnh gọi đặc quyền, hãy thực hiện hãy nhớ sử dụng tài khoản dịch vụ với vai trò Quản trị viên Fleet Engine phù hợp. Nếu không, thao tác này 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.
  • Để tạo và ký JSON trực tiếp dưới dạng phương thức mang mã thông báo, thay vì sử dụng Mã truy cập OAuth 2.0, đọc hướng dẫn về Tài khoản dịch vụ uỷ quyền mà không cần OAuth trong chương trình Nhà phát triển danh tính .

Cho các chuyến đi theo yêu cầu

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

Đối với các 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 này cũng phải chứa xác nhận quyền sở hữu phù 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. Việc cần làm thao tác này, bạn thêm xác nhận quyền sở hữu bổ sung trong phần ủy quyền với 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 chuyến đi theo yêu cầu

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

Mã thông báo mẫu cho hoạt động của 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": {
     "vehicleid": "*",
     "tripid": "*"
   }
}

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 tác vụ đã 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 hoạt động của 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": {
         "taskid": "*"
       }
    }

Mã thông báo mẫu cho thao tác tạo tác vụ hàng loạt 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": ["*"]
       }
    }

Mã thông báo mẫu cho hoạt động của máy chủ phụ trợ theo từng 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": "*"
       }
    }

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"
       }
    }

Mã thông báo mẫu để theo dõi tất cả nhiệm vụ và xe

Ví dụ sau đây là mã thông báo theo dõi tất cả công việc và phương tiện trong đội xe. Xem Thiết lập Thư viện theo dõi nhóm JavaScript để triển khai phía máy khách sẽ sử dụng mã thông báo này:

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

   {
      "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": "*",
       }
    }

Các bước tiếp theo