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

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

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

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

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

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

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

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

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

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

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

  • เมื่อสร้างเพย์โหลด JWT ให้เพิ่มการอ้างสิทธิ์เพิ่มเติมในการให้สิทธิ์ ส่วนที่มีคีย์ vehicleid หรือ tripid ตั้งเป็นค่าของยานพาหนะ รหัสหรือรหัสการเดินทางที่ใช้โทร

สำหรับงานที่กำหนดเวลาไว้

  • เมื่อเซิร์ฟเวอร์ของคุณเรียก API อื่นๆ โทเค็นต้องมีส่วน การอ้างสิทธิ์ที่เหมาะสม ซึ่งคุณทำได้ดังนี้
    • ตั้งค่าของแต่ละคีย์เป็น *
    • ให้สิทธิ์การเข้าถึง taskids และ deliveryvehicleids ทั้งหมดแก่ผู้ใช้ สิ่งต้องทำ คุณต้องเพิ่มการอ้างสิทธิ์เพิ่มเติมในส่วนการให้สิทธิ์ที่มี คีย์ taskid และ deliveryvehicleid
    • เมื่อใช้เครื่องหมายดอกจัน (*) ในการอ้างสิทธิ์ taskids แอตทริบิวต์ดังกล่าวต้องเป็น เฉพาะในอาร์เรย์

ตัวอย่าง JWT สำหรับการเดินทางแบบออนดีมานด์

ส่วนนี้จะแสดงตัวอย่าง 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_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_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": "*"
       }
    }

ตัวอย่างโทเค็นสำหรับแอปไดรเวอร์

    {
      "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"
       }
    }

ตัวอย่างโทเค็นสำหรับติดตามงานและยานพาหนะทั้งหมด

ตัวอย่างต่อไปนี้คือโทเค็นที่ติดตามงานทั้งหมดและ ในกองยานอยู่เสมอ ดูตั้งค่าไลบรารีการติดตามกลุ่ม 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": "*",
       }
    }

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

  • ยืนยันการตั้งค่าเพื่อให้คุณสามารถสร้างยานพาหนะทดลองและตรวจสอบว่า โทเค็นทำงานตามที่ตั้งใจไว้