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ụ Công cụ của đội xe, bạn có thể phát hành JWT theo 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 với dịch vụ này và đơn giản hoá đáng kể việc 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 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 các 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ẽ đưa ra các JWT hoạt động như sau:
Mã ứng dụng khách chạy trong môi trường đáng tin cậy thấp sẽ gọi trên mã máy chủ chạy trong môi trường đáng tin cậy nhằm yêu cầu JWT thích 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 xác nhận hạn chế thêm các 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 tác 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 cho Công cụ của đội xe và ký các JWT đó 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ã giả lập gRPC hoặc thư viện ứng dụng Google API Codegen (GAPIC)
- Hướng dẫn tích hợp trình 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 mình. Phần này đưa ra một số nguyên tắc về cách tạo mã thông báo của riêng bạn. Hãy xem Mã thông báo web JSON trong phần Bảo mật trong Fleet Engine để biết danh sách các trường và thông báo xác nhận quyền sở hữu JWT. Hãy xem phần 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à Công cụ quản lý đội xe sử dụng. Hãy xem phần sau để biết danh sách ví dụ về JWT cho các chuyến đi theo yêu cầu hoặc tác vụ theo lịch.
Nguyên tắc chung
- Sử dụng các 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 thiết bị di động, hãy sử dụng tài khoản dịch vụ cho vai trò Trình điều khiển hoặc SDK người dùng. Nếu không, thiết bị di động có thể thay đổi và truy cập vào dữ liệu không có quyền truy cập.
- Nếu ký JWT đượ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 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 xác thự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 phụ thuộc vào ngôn ngữ và khung 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à đưa tiêu đề
Authorization
vào với mã thông báo của phương thức mang 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 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ặctripid
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 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 cũng phải chứa thông báo xác nhận quyền thích hợp. Để làm việc 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ả
taskids
vàdeliveryvehicleids
. Để 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átaskid
vàdeliveryvehicleid
. - Khi sử dụng dấu hoa thị (
*
) trong thông báo xác nhận quyền sở hữutaskids
, đó phải là phần tử duy nhất trong mảng.
- Đặt giá trị của mỗi khoá thành
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 các chuyến đi theo yêu cầu.
Mã thông báo mẫu cho thao tác trong ứ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 thao tác trong ứ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 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 thông thường nếu bạn sử dụng các tác vụ theo lịch.
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 tiêu 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 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 của đội xe.
Mã thông báo mẫu để theo dõi tất cả nhiệm vụ và phương tiện trong một nhóm xe
Ví dụ sau đây là mã thông báo theo dõi tất cả các nhiệm vụ và xe trong giai đoạn vừa qua từ một ứng dụng dựa trên nền tảng web mà người vận hành sử dụng. Quyền cần thiết cho những thao tác này lớn hơn quyền đối với ứng dụng. 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 vai trò IAM trên đám mây
Fleet Engine Delivery Fleet Reader
.
{
"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 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 mẫu cho hoạt động đã 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 mẫu cho thao tác tạo tác vụ hàng loạt 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": ["*"] } }
Mã thông báo mẫu cho hoạt động của máy chủ phụ trợ đã lên lịch cho 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": "*" } }
Bước tiếp theo
- Xác minh chế độ thiết lập của bạn để bạn có thể tạo xe dùng thử và đảm bảo các mã thông báo của bạn đang 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 hoạt động của máy chủ phụ trợ, hãy xem bài viết Tổng quan về bảo mật.