JSON Web Token (JWT) là một tiêu chuẩn web mở được dùng để xác thực và uỷ quyền trao đổi thông tin giữa ứng dụng và máy chủ. Khi người dùng ứng dụng đăng nhập lần đầu bằng thông tin đăng nhập có vai trò phù hợp, máy chủ sẽ tạo và trả về một JWT được mã hoá và ký bằng chữ ký số để dùng cho các yêu cầu tiếp theo. Quy trình này vừa xác thực người dùng vừa cho phép họ truy cập vào các tuyến đường, dịch vụ và tài nguyên dựa trên vai trò của họ trong tài khoản.
Fleet Engine yêu cầu sử dụng Mã thông báo web JSON (JWT) cho các lệnh gọi phương thức API từ môi trường có độ tin cậy thấp: đ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, được ký, mã hoá và chuyển đến máy khách để tương tác với máy chủ sau đó cho đến khi hết hạn hoặc không còn hợp lệ.
Thông tin chi tiết quan trọng
- Sử dụng Thông tin xác thực mặc định của ứng dụng để xác thực và uỷ quyền đối với Fleet Engine.
- Sử dụng tài khoản dịch vụ phù hợp để ký JWT. Xem các vai trò serviceaccount của Fleet Engine trong phần Kiến thức cơ bản về Fleet Engine.
Không giống như khoá API, JWT có thời hạn ngắn và chỉ giới hạn các thao tác mà vai trò được phép thực hiện. Để biết thêm thông tin về JWT, hãy xem Mã thông báo web JSON trên Wikipedia. Để biết thông tin chi tiết về các vai trò truy cập, hãy xem phần Vai trò tài khoản dịch vụ trong hướng dẫn này.
Các phần tử JWT
JWT chứa một tiêu đề và một phần khai báo. Phần tiêu đề chứa thông tin như khoá riêng tư thu được từ tài khoản dịch vụ và thuật toán mã hoá. Phần khai báo chứa thông tin như thời gian tạo JWT, thời gian tồn tại, các dịch vụ mà JWT khai báo quyền truy cập và thông tin uỷ quyền khác để giới hạn phạm vi truy cập; ví dụ: mã nhận dạng xe giao hàng.
Bảng sau đây cung cấp thông tin mô tả chi tiết về các trường JWT nói chung, cũng như thông tin cụ thể về vị trí bạn có thể tìm thấy các giá trị cho những trường này trong dự án Fleet Engine Cloud.
Trường |
Nội dung mô tả |
---|---|
alg |
Thuật toán cần sử dụng. `RS256`. |
typ |
Loại mã thông báo. `JWT`. |
trẻ |
Mã khoá riêng tư của tài khoản dịch vụ. Bạn có thể tìm thấy giá trị này trong trường |
Trường |
Nội dung mô tả |
---|---|
iss |
Địa chỉ email của tài khoản dịch vụ, có trong trường |
dự bị |
Địa chỉ email của tài khoản dịch vụ, có trong trường |
aud |
|
iat |
Dấu thời gian khi JWT được tạo, được chỉ định bằng số giây đã trôi qua kể từ 00:00:00 |
exp |
Dấu thời gian khi JWT hết hạn, được chỉ định bằng số giây đã trôi qua kể từ |
uỷ quyền |
Tuỳ thuộc vào trường hợp sử dụng, có thể chứa Nếu chỉ định taskid, phạm vi uỷ quyền phải là một mảng ở một trong các dạng sau: "taskids": ["task_id_one","task_id_two"]
hoặc "taskids": ["*"] |
Các khai báo JWT của Fleet Engine
Fleet Engine sử dụng các yêu cầu xác thực riêng tư. Việc sử dụng các khai báo riêng tư đảm bảo rằng chỉ những ứng dụng được uỷ quyền mới có thể truy cập vào dữ liệu của riêng mình.
Ví dụ: khi máy chủ của bạn phát hành Mã thông báo web JSON cho thiết bị di động của tài xế, mã thông báo đó phải chứa yêu cầu vehicleid
hoặc yêu cầu deliveryvehicleid
có giá trị là mã nhận dạng xe của tài xế đó. Sau đó, tuỳ thuộc vào vai trò của người lái xe, JWT chỉ cho phép truy cập vào mã nhận dạng xe cụ thể chứ không phải mã nhận dạng xe tuỳ ý nào khác.
Fleet Engine sử dụng các thông báo xác nhận quyền sở hữu riêng tư sau:
Chuyến đi theo yêu cầu
-
vehicleid
:- Driver SDK luôn sử dụng yêu cầu này, cho dù đang hoạt động trên một chuyến đi hay xe. Phần phụ trợ Fleet Engine đảm bảo rằng xe được liên kết với chuyến đi được yêu cầu trước khi thực hiện sửa đổi.
- JWT có thể bao gồm cả các thao tác về xe và chuyến đi, ngay cả khi không bắt buộc, điều này có thể đơn giản hoá việc triển khai ký JWT.
-
tripid
:- Consumer SDK luôn sử dụng yêu cầu này.
- JWT có thể bao gồm cả các thao tác liên quan đến xe và chuyến đi, ngay cả khi không bắt buộc, điều này có thể đơn giản hoá việc triển khai tính năng ký mã thông báo.
Nhiệm vụ theo lịch
-
deliveryvehicleid
Sử dụng khi gọi các API theo từng xe giao hàng.
-
taskid
Sử dụng khi gọi API cho từng tác vụ.
-
taskids
Sử dụng khi gọi
BatchCreateTasksAPI
. Yêu cầu này phải ở dạng mảng và mảng phải chứa tất cả mã nhận dạng nhiệm vụ cần thiết để hoàn tất yêu cầu. Đừng đưa ra các tuyên bốdelivervehicleid
,trackingid
hoặctaskid
. -
trackingid
Sử dụng khi gọi
GetTaskTrackingInfoAPI
. Yêu cầu xác nhận quyền sở hữu phải khớp với mã theo dõi trong yêu cầu. Đừng đưa ra các tuyên bốdelivervehicleid
,taskid
hoặctaskids
.
Bước tiếp theo
- Hãy đọc về thiết kế bảo mật của Fleet Engine để hiểu rõ quy trình xác thực hoàn chỉnh.
- Tìm hiểu cách Phát hành mã thông báo web JSON từ máy chủ của bạn.