เอกสารนี้ครอบคลุมถึงวิธีออกโทเค็นเว็บ 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 ห้องสมุดทำให้การก่อสร้าง Fleet Engine JWT ง่ายขึ้นและเซ็นชื่ออย่างปลอดภัย ซึ่งจะมอบสิ่งต่อไปนี้
- การประกาศทรัพยากร Dependency ของโปรเจ็กต์
- รายการบทบาทบัญชีบริการทั้งหมดสำหรับการเดินทางแบบออนดีมานด์หรืองานที่กำหนดเวลาไว้
- กลไกการรับรองโทเค็นนอกเหนือจากการใช้ไฟล์ข้อมูลเข้าสู่ระบบ เช่น การแอบอ้างเป็นบัญชีบริการ
- แนบโทเค็นที่ลงนามแล้วไปกับคําขอขาออกที่สร้างขึ้นจากสแต็บ gRPC หรือไลบรารีของไคลเอ็นต์ Google API Codegen (GAPIC)
- วิธีการผสานรวมผู้ลงนามกับไลบรารีของไคลเอ็นต์ Fleet Engine
หากคุณออก JWT จากรหัสของคุณ
หากใช้ไลบรารีการให้สิทธิ์สำหรับ Java คุณต้องติดตั้งใช้งาน JWT ในฐานของโค้ดของคุณเองไม่ได้ ส่วนนี้จะแสดงหลักเกณฑ์ในการสร้างโทเค็นของคุณเอง โปรดดูเว็บโทเค็น JSON ในส่วนความปลอดภัยใน Fleet Engine เพื่อดูรายการฟิลด์และการอ้างสิทธิ์ของ JWT ดูบทบาทของบัญชีบริการสำหรับบทบาทของบัญชีบริการที่ 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 สำหรับการดำเนินการของเซิร์ฟเวอร์แบ็กเอนด์ โปรดดูภาพรวมด้านความปลอดภัย