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