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

เอกสารนี้ครอบคลุมวิธีออกโทเค็นเว็บ JSON เป็นส่วนหนึ่งของการเปิดใช้เว็บ และแอปบนอุปกรณ์เคลื่อนที่ ในการเข้าถึงข้อมูล Fleet Engine หากยังไม่ได้อ่าน โปรดอ่านโทเค็นเว็บ JSON ในส่วนความปลอดภัยใน Fleet Engine เมื่อใช้บริการ Fleet Engine คุณสามารถออก JWT ได้ใน วิธีต่อไปนี้

  • ใช้ไลบรารีการให้สิทธิ์ - Google ขอแนะนําให้ใช้แนวทางนี้เมื่อโค้ดเบสเขียนด้วย Java ไลบรารีนี้จะจัดการการออก JWT สำหรับสถานการณ์การใช้งานทั้งหมดที่คุณอาจต้องใช้กับบริการนี้ และลดความซับซ้อนในการใช้งานอย่างมาก
  • สร้าง JWT ของคุณเอง - หากใช้ไลบรารี JWT ของเราไม่ได้ คุณจะต้อง ให้สร้างโค้ดเหล่านี้ลงในฐานของโค้ดของคุณเอง ส่วนนี้จะแสดงตัวอย่าง JWT ต่างๆ สำหรับแต่ละสถานการณ์

วิธีการทํางานของ JWT

สำหรับสภาพแวดล้อมที่ไม่น่าเชื่อถือ เช่น โทรศัพท์มือถือและเว็บเบราว์เซอร์ แบ็กเอนด์ของคุณ เซิร์ฟเวอร์จะออก JWT ที่ทำงานดังต่อไปนี้

  • โค้ดไคลเอ็นต์ของคุณที่ทำงานอยู่ในสภาพแวดล้อมที่มีความน่าเชื่อถือต่ำเรียกใช้บนเซิร์ฟเวอร์ของคุณ โค้ดที่ทำงานในสภาพแวดล้อมที่เชื่อถือได้อย่างสมบูรณ์เพื่อขอ JWT ที่เหมาะสม เพื่อส่งไปยัง Fleet Engine

  • JWT จะเชื่อมโยงกับบัญชีบริการ ดังนั้นคำขอจึงส่งไปยัง Fleet Engine เชื่อมโยงกับบัญชีบริการที่ลงนามใน JWT โดยปริยาย

  • JWT อ้างว่ายังจำกัดทรัพยากรที่ลูกค้าอาจดำเนินการได้อีกด้วย เช่น ยานพาหนะ การเดินทาง หรืองานที่เจาะจง

ใช้ไลบรารีการให้สิทธิ์สําหรับ Java

หากต้องการใช้ไลบรารีการให้สิทธิ์ของ Fleet Engine สำหรับ Java โปรดไปที่ที่เก็บ GitHub ห้องสมุดนี้ทำให้การก่อสร้าง Fleet Engine ง่ายขึ้น JWT และลงนามอย่างปลอดภัย ซึ่งจะมีประโยชน์ดังต่อไปนี้

  • การประกาศทรัพยากร Dependency ของโปรเจ็กต์
  • รายการทั้งหมดของบทบาทบัญชีบริการทั้งหมดสำหรับการเดินทางแบบออนดีมานด์หรือการเดินทางแบบออนดีมานด์ งานที่กำหนดเวลาไว้
  • กลไกการลงนามโทเค็นนอกเหนือจากการใช้ไฟล์ข้อมูลเข้าสู่ระบบ เช่น การแอบอ้างเป็นบัญชีบริการ
  • แนบโทเค็นที่ลงชื่อไว้กับคำขอขาออกซึ่งส่งจากต้นขั้ว gRPC หรือ ไลบรารีของไคลเอ็นต์ Google API Codegen (GAPIC)
  • วิธีการผสานรวมผู้ลงนามกับไลบรารีของไคลเอ็นต์ Fleet Engine

หากคุณออก JWT จากรหัสของคุณ

หากใช้ไลบรารีการให้สิทธิ์สําหรับ Java ไม่ได้ คุณต้องใช้ JWT ในโค้ดเบสของคุณเอง ส่วนนี้จะแสดงหลักเกณฑ์ 2-3 ข้อในการสร้าง โทเค็น โปรดดู JSON Web Token ในส่วนความปลอดภัยใน Fleet Engine สำหรับรายการฟิลด์และการอ้างสิทธิ์ JWT โปรดดูบัญชีบริการ บทบาทสำหรับบทบาทบัญชีบริการที่ Fleet Engine ใช้ โปรดดู ส่วนต่อไปนี้เพื่อดูรายการตัวอย่างของ JWT สำหรับการเดินทางแบบออนดีมานด์ หรือ งานที่กำหนดเวลาไว้

หลักเกณฑ์ทั่วไป

  • ใช้บัญชีและบทบาทที่เหมาะสม บัญชีบริการและบทบาทที่เกี่ยวข้องช่วยให้มั่นใจว่าผู้ใช้ที่ขอโทเค็นได้รับอนุญาตให้ดูข้อมูลที่โทเค็นให้สิทธิ์เข้าถึง กล่าวโดยละเอียดคือ
    • หากลงนาม JWT เพื่อส่งไปยังอุปกรณ์เคลื่อนที่ ให้ใช้บัญชีบริการสำหรับบทบาทไดรเวอร์หรือ Consumer SDK มิเช่นนั้น อุปกรณ์เคลื่อนที่ อุปกรณ์จะแก้ไขและเข้าถึงข้อมูลที่ไม่ควรมีสิทธิ์เข้าถึงได้
    • หากลงนามใน JWT เพื่อใช้สำหรับการโทรที่ได้รับสิทธิ์ ให้ใช้บริการ ที่มีบทบาทผู้ดูแลระบบ Fleet Engine ที่ถูกต้องเมื่อใช้ ADC หรือ JWT มิฉะนั้นการดำเนินการจะล้มเหลว
  • แชร์เฉพาะโทเค็นที่สร้างขึ้น อย่าแชร์ข้อมูลเข้าสู่ระบบที่ใช้สร้างโทเค็น
  • สำหรับการเรียก gRPC กลไกในการแนบโทเค็นจะขึ้นอยู่กับภาษาและเฟรมเวิร์กที่ใช้เรียก กลไกในการระบุโทเค็นในการเรียก HTTP คือใส่ส่วนหัว Authorization ที่มีโทเค็นของผู้ถือสิทธิ์ซึ่งมีค่าเป็นโทเค็น
  • ส่งคืนเวลาหมดอายุ เซิร์ฟเวอร์จะต้องแสดงเวลาหมดอายุสำหรับ โดยทั่วไปจะใช้เวลาเป็นวินาที
  • หากต้องการสร้างและลงนาม JSON โดยตรงในฐานะผู้ถือโทเค็น ให้ใช้ แทนที่จะใช้โทเค็นเพื่อการเข้าถึง OAuth 2.0 โปรดอ่านคำแนะนำสำหรับบริการ การให้สิทธิ์บัญชีที่ไม่มี OAuth ในข้อมูลระบุตัวตน เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์

สำหรับการเดินทางแบบออนดีมานด์

  • เมื่อสร้างเพย์โหลด 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 สำหรับการดำเนินการของเซิร์ฟเวอร์แบ็กเอนด์ โปรดดูภาพรวมการรักษาความปลอดภัย