เอกสารนี้ครอบคลุมวิธีออกเว็บโทเค็น JSON ซึ่งเป็นส่วนหนึ่งของการเปิดใช้แอปบนเว็บและอุปกรณ์เคลื่อนที่ให้เข้าถึงข้อมูล Fleet Engine หากยังไม่ได้ดำเนินการ โปรดอ่านเว็บโทเค็น JSON ในส่วนความปลอดภัยใน Fleet Engine เมื่อใช้บริการ Fleet Engine คุณจะออก JWT ได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- ใช้ไลบรารีการให้สิทธิ์ - Google ขอแนะนำให้คุณใช้วิธีนี้เมื่อฐานของโค้ดเขียนด้วย Java ไลบรารีนี้จะจัดการการออก JWT สำหรับสถานการณ์ Use Case ทั้งหมดที่คุณอาจต้องใช้กับบริการและช่วยให้การติดตั้งใช้งานง่ายขึ้นอย่างมาก
- สร้าง JWT ของคุณเอง - หากใช้ไลบรารี JWT ของเราไม่ได้ คุณจะต้องสร้าง JWT เหล่านี้ในฐานของโค้ดของคุณเอง ส่วนนี้จะแสดงตัวอย่าง JWT ต่างๆ สำหรับแต่ละสถานการณ์
วิธีการทำงานของ JWT
สำหรับสภาพแวดล้อมที่ไม่น่าเชื่อถือ เช่น โทรศัพท์มือถือและเว็บเบราว์เซอร์ เซิร์ฟเวอร์แบ็กเอนด์จะออก JWT ที่ทำงานดังนี้
โค้ดไคลเอ็นต์ที่ทำงานในสภาพแวดล้อมที่มีความน่าเชื่อถือต่ำจะเรียกใช้โค้ดเซิร์ฟเวอร์ที่ทำงานในสภาพแวดล้อมที่มีความน่าเชื่อถือสูงเพื่อขอ JWT ที่เหมาะสมเพื่อส่งไปยัง Fleet Engine
JWT จะเชื่อมโยงกับบัญชีบริการ ดังนั้นคำขอที่ส่งไปยัง Fleet Engine จะเชื่อมโยงกับบัญชีบริการที่ลงชื่อ JWT โดยนัย
การอ้างสิทธิ์ JWT จะจำกัดทรัพยากรที่ไคลเอ็นต์อาจดำเนินการเพิ่มเติม เช่น ยานพาหนะ การเดินทาง หรืองานที่เฉพาะเจาะจง
ใช้ไลบรารีการให้สิทธิ์สำหรับ Java
หากต้องการใช้ไลบรารีการให้สิทธิ์ Fleet Engine สำหรับ Java โปรดไปที่ที่เก็บ GitHub ไลบรารีนี้ช่วยลดความซับซ้อนในการสร้าง JWT ของ Fleet Engine และลงนามอย่างปลอดภัย โดยจะให้ข้อมูลต่อไปนี้
- การประกาศทรัพยากร Dependency ของโปรเจ็กต์
- รายการบทบาทของบัญชีบริการทั้งหมดสำหรับการเดินทางแบบออนดีมานด์หรือ งานที่กำหนดเวลาไว้
- กลไกการลงนามโทเค็นนอกเหนือจากการใช้ไฟล์ข้อมูลเข้าสู่ระบบ เช่น การแอบอ้างเป็นบัญชีบริการ
- แนบโทเค็นที่ลงชื่อแล้วกับคำขอขาออกที่สร้างจาก Stub ของ gRPC หรือไลบรารีของไคลเอ็นต์ Google API Codegen (GAPIC)
- วิธีการผสานรวมผู้ลงนามกับไลบรารีของไคลเอ็นต์ Fleet Engine
หากคุณออก JWT จากโค้ด
หากใช้ไลบรารีการให้สิทธิ์สำหรับ Java ไม่ได้ คุณต้องใช้ JWT ในฐานของโค้ดของคุณเอง ส่วนนี้จะแสดงหลักเกณฑ์บางประการสำหรับการสร้างโทเค็นของคุณเอง ดูเว็บโทเค็น JSON ในส่วนความปลอดภัยใน Fleet Engine เพื่อดูรายการช่องและการอ้างสิทธิ์ JWT ดูบทบาทของบัญชีบริการสำหรับบทบาทของบัญชีบริการที่ Fleet Engine ใช้ ดูส่วนต่อไปนี้เพื่อดูรายการตัวอย่าง JWT สำหรับการเดินทางแบบออนดีมานด์หรืองานที่กำหนดเวลาไว้
หลักเกณฑ์ทั่วไป
- ใช้บัญชีบริการและบทบาทที่เหมาะสม บัญชีบริการและบทบาทที่เกี่ยวข้องจะช่วยให้มั่นใจว่าผู้ใช้ที่ขอโทเค็นได้รับสิทธิ์ให้ดูข้อมูลที่โทเค็นให้สิทธิ์เข้าถึง โดยเฉพาะอย่างยิ่ง
- หากลงนาม JWT เพื่อส่งไปยังอุปกรณ์เคลื่อนที่ ให้ใช้บัญชีบริการสำหรับบทบาท SDK ของคนขับหรือผู้บริโภค มิฉะนั้น อุปกรณ์เคลื่อนที่จะสามารถแก้ไขและเข้าถึงข้อมูลที่ไม่ควรเข้าถึงได้
- หากลงนาม JWT เพื่อใช้สำหรับการเรียกใช้ที่มีสิทธิ์ ให้ใช้บัญชีบริการที่มีบทบาทผู้ดูแลระบบ Fleet Engine ที่ถูกต้องเมื่อใช้ ADC หรือ JWT ไม่เช่นนั้น การดำเนินการจะล้มเหลว
- แชร์เฉพาะโทเค็นที่สร้างขึ้นเท่านั้น อย่าแชร์ข้อมูลเข้าสู่ระบบที่ใช้สร้างโทเค็น
- สำหรับการเรียก gRPC กลไกในการแนบโทเค็นจะขึ้นอยู่กับภาษาและเฟรมเวิร์กที่ใช้ในการเรียก กลไกในการระบุโทเค็นสำหรับการเรียก HTTP คือการรวมส่วนหัว
Authorizationเข้ากับโทเค็นสำหรับผู้ถือซึ่งมีค่าเป็นโทเค็น - แสดงเวลาหมดอายุ เซิร์ฟเวอร์ของคุณต้องแสดงเวลาหมดอายุของโทเค็น ซึ่งโดยปกติจะแสดงเป็นวินาที
- หากต้องการสร้างและลงชื่อ JSON โดยตรงในฐานะผู้ถือโทเค็นแทนการใช้โทเค็นเพื่อการเข้าถึง OAuth 2.0 โปรดอ่านวิธีการการให้สิทธิ์บัญชีบริการโดยไม่มี OAuth ในเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Identity
สำหรับการเดินทางแบบออนดีมานด์
- เมื่อสร้างเพย์โหลด 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 สำหรับสถานการณ์ทั่วไปในการดำเนินการของกลุ่มยานพาหนะ
ตัวอย่างโทเค็นเพื่อติดตามงานและยานพาหนะทั้งหมดในกลุ่มยานพาหนะ
ตัวอย่างต่อไปนี้คือโทเค็นที่ติดตามงานและยานพาหนะทั้งหมดในกลุ่มยานพาหนะจากแอปบนเว็บที่ผู้ให้บริการใช้ สิทธิ์ที่จำเป็นสำหรับการดำเนินการเหล่านี้มีมากกว่าสิทธิ์สำหรับแอปพลิเคชันไคลเอ็นต์ ดูตั้งค่าไลบรารี Fleet Tracking ของ JavaScript สำหรับการติดตั้งใช้งานฝั่งไคลเอ็นต์ที่จะใช้โทเค็นนี้
ลงชื่อเข้าใช้โทเค็นโดยใช้บทบาท
Fleet Engine Delivery Fleet ReaderCloud 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 สำหรับการดำเนินการของเซิร์ฟเวอร์แบ็กเอนด์ได้ที่ภาพรวมด้านความปลอดภัย