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 các ứng dụng dựa trên web và thiết bị di động của bạn truy cập vào dữ liệu Fleet Engine. Nếu bạn chưa làm việc này, hãy đọ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ể phát hành JWT theo một trong những 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ể quá trình triển khai của bạn.
  • 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 trong 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 đang chạy trong môi trường có độ tin cậy thấp sẽ gọi mã máy chủ đang chạy trong môi trường hoàn toàn tin cậy để yêu cầu JWT thích hợp chuyể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 Fleet Engine sẽ được liên kết ngầm với tài khoản dịch vụ đã ký JWT.

  • Các xác nhận JWT hạn chế thêm những tài nguyên mà ứng dụng có thể hoạt động, chẳng hạn như các phương tiện, chuyến đi hoặc nhiệm vụ cụ thể.

Sử 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 đơn giản hoá việc tạo JWT Fleet Engine và ký chúng một cách an toàn. Thẻ này cung cấp những thông tin sau:

  • Khai báo phần phụ thuộc của dự án
  • Danh sách đầy đủ tất cả các vai trò tài khoản dịch vụ cho các chuyến đi theo yêu cầu hoặc các nhiệm vụ theo lịch
  • Các cơ chế ký mã thông báo khác 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 đi ra được thực hiện từ một phần giữ chỗ gRPC hoặc một thư viện ứng dụng Google API Codegen (GAPIC)
  • Hướng dẫn về cách tích hợp trình ký với thư viện ứng dụng Fleet Engine

Nếu bạn phát hành JWT từ mã của mình

Nếu không thể 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 mình. Phần này cung cấp một số nguyên tắc để tạo mã thông báo của riêng bạn. Hãy xem phần Mã thông báo web JSON trong mục Bảo mật trong Fleet Engine để biết danh sách các trường và xác nhận quyền sở hữu JWT. Hãy xem Các vai trò của tài khoản dịch vụ để biết các vai trò của tài khoản dịch vụ mà Fleet Engine sử dụng. Hãy xem phần sau để biết danh sách các ví dụ về JWT cho chuyến đi theo yêu cầu hoặc nhiệm vụ theo lịch.

Nguyên tắc chung

  • Sử dụng tài khoản dịch vụ và vai trò phù hợp. Tài khoản dịch vụ và vai trò được liên kết đảm bảo rằng người dùng yêu cầu mã thông báo được phép xem thông tin mà mã thông báo cấp cho họ quyền truy cập. Cụ thể:
    • Nếu ký một JWT sẽ được truyền đến thiết bị di động, hãy sử dụng tài khoản dịch vụ cho vai trò Driver hoặc Consumer SDK. 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ẽ được dùng cho các lệnh gọi đặc quyền, hãy sử dụng tài khoản dịch vụ có vai trò Quản trị viên Fleet Engine phù hợp khi dùng ADC hoặc JWT. Nếu không, thao tác sẽ không thành công.
  • Chỉ chia sẻ những mã thông báo đã tạo. Đừng bao giờ chia sẻ thông tin đăng nhập 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 phụ thuộc vào ngôn ngữ và khung được dùng để thực hiện lệnh gọi. Cơ chế chỉ định mã thông báo cho một lệnh gọi HTTP là thêm một tiêu đề Authorization có mã thông báo của người mang mà 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 báo, thường là tính bằng giây.
  • Nếu bạn cần tạo và ký trực tiếp một JSON dưới dạng mã thông báo người mang, thay vì sử dụng mã truy cập OAuth 2.0, hãy đọc hướng dẫn về 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 danh tính.

Đố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 khai báo bổ sung vào phần uỷ quyền bằng khoá vehicleid hoặc tripid được đặt thành giá trị mã nhận dạng xe hoặc mã nhận dạng chuyến đi mà lệnh gọi đang được thực hiện.

Đối với các tác vụ định kỳ

  • 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 tin xác nhận phù hợp. Để làm việc này, bạn có thể thực hiện các bước 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 việc này, bạn cần thêm một thông tin 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 khai báo taskids, dấu này 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 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.

Ví dụ về mã thông báo cho một thao tác của ứng dụng dành cho người lái xe

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

Ví dụ về mã thông báo cho một hoạt động của ứng dụng 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ụ định kỳ

Phần này cung cấp ví dụ về JWT cho các trường hợp thông thường nếu bạn sử dụng các tác vụ định kỳ.

Ví dụ về mã thông báo cho một ứng dụng dành cho người lái xe

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

Ví dụ về mã thông báo cho ứng dụng người dù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 các hoạt động của đội xe

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

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

Ví dụ sau đây là một mã thông báo theo dõi tất cả các nhiệm vụ và xe trong đội xe từ một ứng dụng dựa trên web mà nhân viên vận hành sử dụng. Các quyền cần thiết cho những 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 JavaScript để biết thông tin 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": "*",
       }
    }

Phương thức xác thực thay thế cho các thao tác trên máy chủ phụ trợ

Bạn nên sử dụng ADC để xác thực cá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ụ này.

Ví dụ về mã thông báo cho một thao tác 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 ví dụ cho một thao tác đã lên lịch 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 ví dụ cho một thao tác tạo hàng loạt các tác vụ của 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": {
         "taskids": ["*"]
       }
    }
  

Ví dụ về mã thông báo cho hoạt động của máy chủ phụ trợ theo lịch trình cho mỗi xe giao hàng

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

Bước tiếp theo

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