ออกโทเค็นเว็บ JSON

เอกสารนี้ครอบคลุมวิธีออกเว็บโทเค็น 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 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": "*"
       }
    }
  

ขั้นตอนถัดไป