เอกสารนี้อธิบายวิธีออกโทเค็นเว็บ JSON เพื่อเปิดใช้สิทธิ์ให้แอปบนเว็บและแอปบนอุปกรณ์เคลื่อนที่เข้าถึงข้อมูลของ Fleet Engine หากคุณยังไม่ได้อ่าน โปรดอ่านโทเค็นเว็บ JSON ในส่วนความปลอดภัยใน Fleet Engine เมื่อใช้บริการ Fleet Engine คุณจะออก JWT ได้ 1 ใน 2 วิธีต่อไปนี้
- ใช้ไลบรารีการให้สิทธิ์ - Google ขอแนะนําให้ใช้แนวทางนี้เมื่อโค้ดเบสเขียนด้วย Java ไลบรารีนี้จะจัดการการออก JWT สำหรับสถานการณ์การใช้งานทั้งหมดที่คุณอาจต้องใช้กับบริการนี้ และลดความซับซ้อนในการใช้งานอย่างมาก
- สร้าง JWT ของคุณเอง - หากใช้ไลบรารี JWT ของเราไม่ได้ คุณจะต้องสร้าง JWT เหล่านี้ลงในโค้ดเบสของคุณเอง ส่วนนี้จะแสดงตัวอย่าง JWT ต่างๆ สำหรับแต่ละสถานการณ์
วิธีการทํางานของ JWT
สําหรับสภาพแวดล้อมที่ไม่น่าเชื่อถือ เช่น โทรศัพท์มือถือและเว็บเบราว์เซอร์ เซิร์ฟเวอร์แบ็กเอนด์จะออก JWT ที่ทํางานดังนี้
โค้ดไคลเอ็นต์ที่ทำงานในสภาพแวดล้อมที่มีระดับความน่าเชื่อถือต่ำจะเรียกใช้โค้ดเซิร์ฟเวอร์ที่ทำงานในสภาพแวดล้อมที่มีความน่าเชื่อถือสูงเพื่อขอ JWT ที่เหมาะสมเพื่อส่งไปยัง Fleet Engine
JWT จะเชื่อมโยงกับบัญชีบริการ ดังนั้นคําขอที่ส่งไปยัง Fleet Engine จะเชื่อมโยงกับบัญชีบริการที่ลงนามใน JWT โดยปริยาย
การอ้างสิทธิ์ JWT จะจํากัดทรัพยากรเพิ่มเติมที่ไคลเอ็นต์อาจดําเนินการ เช่น ยานพาหนะ การเดินทาง หรืองานบางอย่าง
ใช้ไลบรารีการให้สิทธิ์สําหรับ Java
หากต้องการใช้ไลบรารีการให้สิทธิ์ของ Fleet Engine สำหรับ Java โปรดไปที่ที่เก็บ GitHub ไลบรารีนี้ช่วยให้การสร้าง JWT ของ Fleet Engine ง่ายขึ้นและลงนามอย่างปลอดภัย ซึ่งจะมีประโยชน์ดังต่อไปนี้
- การประกาศทรัพยากร Dependency ของโปรเจ็กต์
- รายการบทบาทบัญชีบริการทั้งหมดสำหรับการเดินทางแบบออนดีมานด์หรืองานที่กำหนดเวลาไว้
- กลไกการลงนามโทเค็นนอกเหนือจากการใช้ไฟล์ข้อมูลเข้าสู่ระบบ เช่น การแอบอ้างเป็นบัญชีบริการ
- แนบโทเค็นที่ลงนามแล้วไปกับคําขอขาออกที่สร้างขึ้นจากสแต็บ gRPC หรือไลบรารีไคลเอ็นต์ Google API Codegen (GAPIC)
- วิธีการผสานรวมผู้ลงนามกับไลบรารีของไคลเอ็นต์ Fleet Engine
หากคุณออก JWT จากโค้ด
หากใช้ไลบรารีการให้สิทธิ์สําหรับ Java ไม่ได้ คุณต้องใช้ JWT ในโค้ดเบสของคุณเอง ส่วนนี้จะแสดงหลักเกณฑ์ในการสร้างโทเค็นของคุณเอง ดูรายการช่องและข้อมูลอ้างสิทธิ์ JWT ได้ที่โทเค็นเว็บ JSON ในส่วนความปลอดภัยใน Fleet Engine ดูบทบาทของบัญชีบริการสำหรับบทบาทของบัญชีบริการที่ Fleet Engine ใช้ ดูตัวอย่าง JWT สำหรับการเดินทางแบบออนดีมานด์หรืองานที่กำหนดเวลาไว้ได้ในส่วนต่อไปนี้
หลักเกณฑ์ทั่วไป
- ใช้บัญชีบริการและบทบาทที่เหมาะสม บัญชีบริการและบทบาทที่เกี่ยวข้องช่วยให้มั่นใจว่าผู้ใช้ที่ขอโทเค็นได้รับอนุญาตให้ดูข้อมูลที่โทเค็นให้สิทธิ์เข้าถึง กล่าวคือ
- หากลงนาม JWT เพื่อส่งไปยังอุปกรณ์เคลื่อนที่ ให้ใช้บัญชีบริการสำหรับบทบาทไดรเวอร์หรือ Consumer SDK ไม่เช่นนั้น อุปกรณ์เคลื่อนที่จะแก้ไขและเข้าถึงข้อมูลที่ไม่ควรเข้าถึงได้
- หากลงนาม JWT เพื่อใช้สำหรับการเรียกที่มีสิทธิ์ ให้ใช้บัญชีบริการที่มีบทบาทผู้ดูแลระบบ Fleet Engine ที่ถูกต้องเมื่อใช้ ADC หรือ JWT มิฉะนั้น การดำเนินการจะล้มเหลว
- แชร์เฉพาะโทเค็นที่สร้าง อย่าแชร์ข้อมูลเข้าสู่ระบบที่ใช้สร้างโทเค็น
- สำหรับการเรียก gRPC กลไกในการแนบโทเค็นจะขึ้นอยู่กับภาษาและเฟรมเวิร์กที่ใช้เรียก กลไกในการระบุโทเค็นในการเรียก HTTP คือใส่ส่วนหัว
Authorization
ที่มีโทเค็นของผู้ถือสิทธิ์ซึ่งมีค่าเป็นโทเค็น - แสดงเวลาหมดอายุ เซิร์ฟเวอร์ของคุณต้องแสดงเวลาหมดอายุของโทเค็น โดยปกติจะเป็นเวลาเป็นวินาที
- หากต้องการสร้างและลงนามใน JSON โดยตรงในฐานะผู้ถือโทเค็นแทนการใช้โทเค็นการเข้าถึง OAuth 2.0 โปรดอ่านวิธีการการให้สิทธิ์บัญชีบริการโดยไม่ต้องใช้ OAuth ในเอกสารประกอบสำหรับนักพัฒนาแอปด้านข้อมูลประจำตัว
สำหรับการเดินทางแบบออนดีมานด์
- เมื่อสร้างเพย์โหลด JWT ให้เพิ่มการอ้างสิทธิ์เพิ่มเติมในส่วนการให้สิทธิ์โดยตั้งค่าคีย์
vehicleid
หรือtripid
เป็นค่ารหัสยานพาหนะหรือรหัสการเดินทางที่จะทำการเรียก
สำหรับงานที่กําหนดเวลาไว้
- เมื่อเซิร์ฟเวอร์เรียก API อื่นๆ โทเค็นต้องมีการอ้างสิทธิ์ที่เหมาะสมด้วย โดยทําดังนี้
- ตั้งค่าของคีย์แต่ละรายการเป็น
*
- ให้สิทธิ์เข้าถึง
taskids
และdeliveryvehicleids
ทั้งหมดแก่ผู้ใช้ โดยเพิ่มการอ้างสิทธิ์เพิ่มเติมในส่วนการให้สิทธิ์ด้วยคีย์taskid
และdeliveryvehicleid
- เมื่อใช้เครื่องหมายดอกจัน (
*
) ในการอ้างสิทธิ์taskids
ต้องเป็นองค์ประกอบเดียวในอาร์เรย์
- ตั้งค่าของคีย์แต่ละรายการเป็น
ตัวอย่าง JWT สำหรับการเดินทางแบบออนดีมานด์
ส่วนนี้จะแสดงตัวอย่าง JWT สำหรับสถานการณ์ที่พบบ่อยหากคุณใช้เที่ยวบินแบบออนดีมานด์
ตัวอย่างโทเค็นสําหรับการดําเนินการของแอปคนขับ
{
"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"
}
}
ตัวอย่างโทเค็นสําหรับการดําเนินการของแอปสําหรับผู้บริโภค
{
"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"
}
}
ตัวอย่าง JWT สำหรับงานที่กำหนดเวลาไว้
ส่วนนี้จะแสดงตัวอย่าง JWT สำหรับสถานการณ์ทั่วไปหากคุณใช้งานที่ตั้งเวลาไว้
ตัวอย่างโทเค็นสําหรับแอปคนขับ
{
"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"
}
}
ตัวอย่างโทเค็นสําหรับแอปผู้บริโภค
{
"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"
}
}
ตัวอย่าง JWT สําหรับการดําเนินการของกลุ่ม
ส่วนนี้จะแสดงตัวอย่าง JWT สำหรับสถานการณ์ทั่วไปในการใช้งานกลุ่มรถ
ตัวอย่างโทเค็นเพื่อติดตามงานและยานพาหนะทั้งหมดในกลุ่ม
ตัวอย่างต่อไปนี้คือโทเค็นที่ติดตามงานและยานพาหนะทั้งหมดในฝูงรถจากแอปบนเว็บที่ผู้ปฏิบัติงานใช้ สิทธิ์ที่จําเป็นสําหรับการดําเนินการเหล่านี้มีมากกว่าสําหรับแอปพลิเคชันไคลเอ็นต์ โปรดดูตั้งค่าไลบรารีการติดตามฟลีต JavaScript สําหรับการใช้งานฝั่งไคลเอ็นต์ที่จะใช้โทเค็นนี้
ลงนามในโทเค็นโดยใช้บทบาท
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": "*",
}
}
วิธีการตรวจสอบสิทธิ์ทางเลือกสําหรับการดําเนินการของเซิร์ฟเวอร์แบ็กเอนด์
Google ขอแนะนำให้คุณใช้ ADC เพื่อตรวจสอบสิทธิ์การดําเนินการของเซิร์ฟเวอร์แบ็กเอนด์ หากใช้ ADC ไม่ได้และต้องการใช้ JWT โปรดดูตัวอย่างเหล่านี้
ตัวอย่างโทเค็นสําหรับการดําเนินการของเซิร์ฟเวอร์แบ็กเอนด์แบบออนดีมานด์
{ "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": "*" } }
ตัวอย่างโทเค็นสําหรับการดําเนินการของเซิร์ฟเวอร์แบ็กเอนด์ที่ตั้งเวลาไว้
{ "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": "*" } }
ตัวอย่างโทเค็นสําหรับการดำเนินการสร้างงานแบบเป็นกลุ่มของเซิร์ฟเวอร์แบ็กเอนด์ที่กำหนดเวลาไว้
{ "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": ["*"] } }
ตัวอย่างโทเค็นสําหรับเซิร์ฟเวอร์แบ็กเอนด์ที่ตั้งเวลาไว้สําหรับการดำเนินการต่อยานพาหนะการนำส่งแต่ละคัน
{ "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": "*" } }
ขั้นตอนถัดไป
- ยืนยันการตั้งค่าเพื่อให้คุณสร้างยานพาหนะทดลองและตรวจสอบว่าโทเค็นทํางานตามที่ตั้งใจไว้
- ดูข้อมูลเกี่ยวกับการใช้ ADC แทน JWT สำหรับการดำเนินการของเซิร์ฟเวอร์แบ็กเอนด์ได้ที่ภาพรวมด้านความปลอดภัย