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