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