การตรวจสอบสิทธิ์และการให้สิทธิ์

ส่วนนี้จะอธิบายแนวคิดการตรวจสอบสิทธิ์และการให้สิทธิ์ที่คำนึงถึงการใช้งาน Fleet Engine ซึ่งจะแสดงรายละเอียดกระบวนการที่คุณต้องทำเพื่อรักษาความปลอดภัยการเรียกฟังก์ชัน Fleet Engine

คุณกำหนดค่าความสามารถที่ได้รับจาก Last Mile Fleet Solution ผ่านคอนโซล Google Cloud ได้ API และ SDK เหล่านี้กำหนดให้ใช้ JSON Web Token (JWT) ที่ลงนามโดยใช้บัญชีบริการที่สร้างจาก Cloud Console

ภาพรวม

ในฐานะส่วนหนึ่งของกลไกการให้สิทธิ์ Fleet Engine ให้ความปลอดภัยเป็นพิเศษจากการเรียกใช้ที่มาจากสภาพแวดล้อมที่มีความน่าเชื่อถือต่ำ สภาพแวดล้อมที่มีการเชื่อถือต่ำ รวมถึงสมาร์ทโฟนและเบราว์เซอร์ นอกจากนี้ Fleet Engine ใช้หลักการให้สิทธิ์ขั้นต่ำที่สุด ซึ่งควรให้สิทธิ์เฉพาะที่จำเป็นต่อการทำงานให้เสร็จสิ้นให้กับการโทร

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

หลักการออกแบบการตรวจสอบสิทธิ์

ขั้นตอนการตรวจสอบสิทธิ์ของ Fleet Engine ใช้หลักการออกแบบต่อไปนี้

  • บทบาท IAM จะกำหนดขอบเขต ของกิจกรรมที่อนุญาตสำหรับผู้โทร ตัวอย่างเช่น บทบาทSuperUserได้รับอนุญาตให้ทำทุกอย่างได้ ในขณะที่บทบาทSuperUserมีไว้เพื่ออัปเดตตำแหน่งเพียงเล็กน้อยเท่านั้น

  • บทบาท IAM เชื่อมโยงกับบัญชีบริการ

  • JWT อ้างสิทธิ์จำกัดบุคคลที่ผู้โทรอาจดำเนินการด้วย โดยอาจเป็นงานเฉพาะหรือยานพาหนะที่นำส่งสินค้าก็ได้

  • คำขอที่ส่งไปยัง Fleet Engine จะมี JWT เสมอ

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

  • Fleet Engine ดำเนินการตรวจสอบความปลอดภัยต่อไปนี้

    1. บทบาท IAM ที่เชื่อมโยงกับบัญชีบริการจะให้สิทธิ์ที่ถูกต้องแก่ผู้เรียกใช้ในการเรียก API

    2. การอ้างสิทธิ์ JWT ที่ส่งมาในคำขอจะให้การให้สิทธิ์ที่ถูกต้อง สำหรับผู้โทรในการดำเนินการในหน่วยงาน

ขั้นตอนการตรวจสอบสิทธิ์

แผนภาพลำดับต่อไปนี้จะแสดงรายละเอียดขั้นตอนการตรวจสอบสิทธิ์

  1. ผู้ดูแลกลุ่มรถยนต์สร้างบัญชีบริการ

  2. ผู้ดูแลระบบของกลุ่มรถยนต์จะมอบหมายบทบาท IAM เฉพาะให้กับบัญชีบริการ

  3. ผู้ดูแลระบบของกลุ่มอุปกรณ์จะเป็นผู้กำหนดค่าระบบแบ็กเอนด์ด้วยบัญชีบริการ

  4. แอปไคลเอ็นต์ขอ JWT จากแบ็กเอนด์ของพาร์ทเนอร์ ผู้ขออาจเป็นแอปไดรเวอร์ แอปสำหรับผู้บริโภค หรือแอปเฝ้าติดตาม

  5. Fleet Engine จะออก JWT ให้บัญชีบริการที่เกี่ยวข้อง แอปไคลเอ็นต์จะได้รับ JWT

  6. แอปไคลเอ็นต์ใช้ JWT เพื่อเชื่อมต่อกับ Fleet Engine เพื่ออ่านหรือแก้ไขข้อมูล ทั้งนี้ขึ้นอยู่กับบทบาท IAM ที่กำหนดให้แอปในขั้นตอนการตั้งค่า

แผนภาพลำดับการตรวจสอบสิทธิ์

การตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์

หากต้องการตั้งค่าโปรเจ็กต์ระบบคลาวด์ ให้สร้างโปรเจ็กต์ก่อนแล้วจึงสร้างบัญชีบริการ

วิธีสร้างโปรเจ็กต์ Google Cloud

  1. สร้างโปรเจ็กต์ Google Cloud โดยใช้คอนโซล Google Cloud
  2. การใช้ API และแดชบอร์ดบริการเปิดใช้งาน Local Rides and Deliveries API

บัญชีบริการและบทบาท IAM

บัญชีบริการเป็นบัญชีชนิดพิเศษที่ใช้โดยแอปพลิเคชัน ไม่ใช่บัญชีบุคคล โดยทั่วไป บัญชีบริการจะใช้ในการสร้าง JWT ที่ให้สิทธิ์ชุดต่างๆ โดยขึ้นอยู่กับบทบาท เพื่อลดความเสี่ยงที่จะเกิดการละเมิด คุณสร้างบัญชีบริการได้หลายบัญชี โดยแต่ละบัญชีมีจำนวนบทบาทขั้นต่ำที่จำเป็น

Last Mile Fleet Solution ใช้บทบาทต่อไปนี้

บทบาทคำอธิบาย
ผู้ใช้ไดรเวอร์ที่เชื่อถือได้ของ Fleet Engine Delivery

roles/fleetengine.deliveryTrustedDriver
ให้สิทธิ์สร้างและอัปเดตยานพาหนะและงานนำส่ง รวมถึงการอัปเดตตำแหน่งของยานพาหนะนำส่งและสถานะงาน หรือผลลัพธ์ โดยทั่วไปโทเค็นที่สร้างจากบัญชีบริการที่มีบทบาทนี้จะใช้จากอุปกรณ์เคลื่อนที่ของพนักงานขับรถส่งของหรือจากเซิร์ฟเวอร์แบ็กเอนด์ของคุณ
ผู้ใช้ไดรเวอร์ที่ไม่น่าเชื่อถือของ Fleet Engine Delivery

roles/fleetengine.deliveryUntrustedDriver
ให้สิทธิ์ในการอัปเดตตำแหน่งของยานพาหนะที่นำส่ง โดยทั่วไปแล้วโทเค็นที่สร้างจากบัญชีบริการที่มีบทบาทนี้มักจะใช้จากอุปกรณ์เคลื่อนที่ของพนักงานขับรถส่งอาหาร
ผู้ใช้ผู้บริโภคของ Fleet Engine Delivery

roles/fleetengine.deliveryConsumer
ให้สิทธิ์ค้นหางานโดยใช้รหัสติดตาม และอ่านแต่ไม่อัปเดตข้อมูลงาน โดยทั่วไปแล้วโทเค็นที่สร้างจากบัญชีบริการที่มีบทบาทนี้มักจะใช้จากเว็บเบราว์เซอร์ของผู้ใช้การนำส่ง
ผู้ใช้ Fleet Engine Delivery ระดับสูง

roles/fleetengine.deliverySuperUser
มอบสิทธิ์เข้าถึง API สำหรับยานพาหนะการนำส่งและ Tasks ทั้งหมด โดยทั่วไปแล้ว เซิร์ฟเวอร์แบ็กเอนด์จะใช้โทเค็นที่สร้างจากบัญชีบริการที่มีบทบาทนี้
ผู้อ่าน Fleet Engine Delivery Fleet

roles/fleetengine.deliveryFleetReader
มอบสิทธิ์ในการอ่านยานพาหนะและงานของการนำส่ง รวมถึงค้นหางานโดยใช้รหัสติดตาม โดยทั่วไปแล้วโทเค็นที่สร้างขึ้นโดยบัญชีบริการที่มีบทบาทนี้มักจะใช้จากเว็บเบราว์เซอร์ของผู้ให้บริการกลุ่มการจัดส่ง

องค์กรที่มีอุปกรณ์ที่จัดการโดยฝ่ายไอทีขององค์กรสามารถใช้ประโยชน์จากความยืดหยุ่นของบทบาทผู้ใช้งานขับรถที่เชื่อถือได้ของ Fleet Engine และเลือกที่จะผสานรวมการโต้ตอบของ Fleet Engine บางส่วนหรือทั้งหมดไว้ในแอปบนอุปกรณ์เคลื่อนที่

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

SDK ไดรเวอร์และผู้บริโภคสร้างขึ้นโดยยึดตามบทบาทมาตรฐานเหล่านี้ อย่างไรก็ตาม คุณอาจสร้างบทบาทที่กำหนดเองที่อนุญาตให้รวมชุดสิทธิ์ที่กำหนดเองเข้าด้วยกันได้ SDK ไดรเวอร์และผู้บริโภคจะแสดงข้อความแสดงข้อผิดพลาดเมื่อไม่มีสิทธิ์ที่จำเป็น ด้วยเหตุนี้ เราจึงขอแนะนำเป็นอย่างยิ่งให้ใช้ชุดบทบาทมาตรฐานที่แสดงข้างต้นแทนบทบาทที่กำหนดเอง

การสร้างบัญชีบริการ

คุณสร้างบัญชีบริการได้โดยใช้แท็บ IAM & Admin > Service Accounts ใน Google Cloud Console จากรายการบทบาทแบบเลื่อนลง ให้เลือก Flleet Engine และมอบหมายบทบาทใดบทบาทหนึ่งให้กับบัญชีบริการ แนวทางปฏิบัติที่ดีคือการระบุบัญชีที่เชื่อมโยงกับแต่ละบทบาท เช่น ตั้งชื่อที่สื่อความหมายให้บัญชีบริการ

เพื่อความสะดวก หากคุณต้องการสร้าง JWT สำหรับไคลเอ็นต์ที่ไม่น่าเชื่อถือ การเพิ่มผู้ใช้ในบทบาทผู้สร้างโทเค็นบัญชีบริการทำให้ผู้ใช้สร้างโทเค็นด้วยเครื่องมือบรรทัดคำสั่ง gcloud ได้

gcloud projects add-iam-policy-binding project-id \
       --member=user:my-user@example.com \
       --role=roles/iam.serviceAccountTokenCreator

โดย my-user@example.com คืออีเมลที่ใช้ในการตรวจสอบสิทธิ์กับ gcloud (gcloud auth list --format='value(account)')

ไลบรารีการตรวจสอบสิทธิ์ Fleet Engine

Fleet Engine ใช้ JWT เพื่อจำกัดการเข้าถึง API ของ Fleet Engine ไลบรารีการตรวจสอบสิทธิ์ Fleet Engine ใหม่พร้อมใช้งานใน GitHub ช่วยลดความซับซ้อนของการสร้าง Fleet Engine JWT และลงนามอย่างปลอดภัย

ไลบรารีมีประโยชน์ดังต่อไปนี้

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

การสร้าง JSON Web Token (JWT) สำหรับการให้สิทธิ์

เมื่อไม่ได้ใช้ไลบรารีการตรวจสอบสิทธิ์ Fleet Engine คุณจะต้องสร้าง JWT ภายในฐานของโค้ดโดยตรง คุณจึงต้องมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับ JWT และความเกี่ยวข้องกับ Fleet Engine นี่คือเหตุผลที่เราแนะนำอย่างยิ่ง ให้ใช้ประโยชน์จาก Fleet Engine Auth Library

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

ส่วนหัวของ JWT ประกอบด้วยช่องต่อไปนี้

ฟิลด์คำอธิบาย
alg อัลกอริทึมที่จะใช้ "RS256"
typ ประเภทของโทเค็น "JWT"
บุตรหลาน รหัสคีย์ส่วนตัวของบัญชีบริการ โดยคุณจะดูค่านี้ได้ในช่อง "private_key_id" ของไฟล์ JSON ของบัญชีบริการ ตรวจสอบว่าใช้คีย์จากบัญชีบริการที่มีระดับสิทธิ์ที่ถูกต้อง

ส่วนการอ้างสิทธิ์ JWT ประกอบด้วยช่องต่อไปนี้

ฟิลด์คำอธิบาย
IS อีเมลของบัญชีบริการ
สำรอง อีเมลของบัญชีบริการ
Aud SERVICE_NAME ของบัญชีบริการ ในกรณีนี้คือ https://fleetengine.googleapis.com/
IAt การประทับเวลาเมื่อสร้างโทเค็น ระบุเป็นวินาทีที่ผ่านไปตั้งแต่ 00:00:00 น. ตามเขตเวลา UTC วันที่ 1 มกราคม 1970 รอ 10 นาทีสำหรับการบิด หากการประทับเวลาอยู่ในอดีตหรือในอนาคตมากเกินไป เซิร์ฟเวอร์อาจรายงานข้อผิดพลาด
exp การประทับเวลาที่โทเค็นหมดอายุ ระบุเป็นวินาทีที่ผ่านไปตั้งแต่ 00:00:00 น. ตามเขตเวลา UTC วันที่ 1 มกราคม 1970 คำขอจะไม่สำเร็จหากการประทับเวลานานกว่า 1 ชั่วโมงในอนาคต
การให้สิทธิ์ อาจมี "deliveryvehicleid", "trackingid", "taskid" หรือ "taskids" โดยขึ้นอยู่กับกรณีการใช้งาน

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

การอ้างสิทธิ์ JWT

Last Mile Fleet Solution ใช้การอ้างสิทธิ์ส่วนตัว การใช้การอ้างสิทธิ์ส่วนตัวช่วยให้มั่นใจได้ว่า จะมีเพียงไคลเอ็นต์ที่ได้รับอนุญาตเท่านั้นที่เข้าถึงข้อมูลของตนเองได้ ตัวอย่างเช่น เมื่อแบ็กเอนด์ออกโทเค็นเว็บ JSON สำหรับอุปกรณ์เคลื่อนที่ของพนักงานขับรถส่ง โทเค็นดังกล่าวควรมีการอ้างสิทธิ์ deliveryvehicleid ที่มีค่ารหัสยานพาหนะที่นำส่งของผู้ขับคนดังกล่าว จากนั้นโทเค็นจะให้สิทธิ์เข้าถึงเฉพาะรหัสยานพาหนะที่นำส่งที่เฉพาะเจาะจง ไม่ใช่รหัสยานพาหนะอื่นใดก็ตามที่กำหนดเอง ทั้งนี้ขึ้นอยู่กับบทบาทผู้ขับขี่

Last Mile Fleet Solution ใช้การกล่าวอ้างส่วนตัวต่อไปนี้

  • deliveryvehicleid - ใช้เมื่อเรียกใช้ API ต่อยานพาหนะ 1 คัน
  • taskid - ใช้เมื่อเรียกใช้ API ของแต่ละงาน
  • taskids - ใช้เมื่อโทรหา BatchCreateTasksAPI โดยการอ้างสิทธิ์นี้ต้องอยู่ในรูปแบบอาร์เรย์ และอาร์เรย์ควรมีรหัสงานทั้งหมดที่จำเป็นในการดำเนินการตามคำขอให้เสร็จสมบูรณ์ อย่ารวมการอ้างสิทธิ์ delivervehicleid, trackingid หรือ taskid
  • trackingid - ใช้เมื่อโทรหา SearchTasksAPI การอ้างสิทธิ์ต้องตรงกับรหัสติดตามในคำขอ อย่ารวมการอ้างสิทธิ์ delivervehicleid, taskid หรือ taskids

โทเค็นดังกล่าวต้องมีการอ้างสิทธิ์ที่เหมาะสมเมื่อเรียกใช้ API จากเซิร์ฟเวอร์แบ็กเอนด์ด้วย แต่คุณใช้ค่าพิเศษของเครื่องหมายดอกจัน ("*") สำหรับการอ้างสิทธิ์ deliveryvehicleid, taskid และ trackingid ได้ เครื่องหมายดอกจัน ("*") อาจใช้ในการอ้างสิทธิ์ taskids ได้ด้วย แต่ต้องเป็นองค์ประกอบเดียวในอาร์เรย์

หากต้องการสร้างและลงนาม JSON โดยตรงในฐานะผู้ถือโทเค็นแทนที่จะใช้โทเค็นเพื่อการเข้าถึง OAuth 2.0 โปรดอ่านวิธีการสำหรับการให้สิทธิ์บัญชีบริการโดยไม่ใช้ OAuth ในเอกสารสำหรับนักพัฒนาซอฟต์แวร์ข้อมูลประจำตัว

กลไกการแนบโทเค็นกับการเรียก gRPC จะขึ้นอยู่กับภาษาและเฟรมเวิร์กที่ใช้ในการเรียก กลไกในการระบุโทเค็นไปยังการเรียก HTTP คือการรวมส่วนหัวการให้สิทธิ์ไว้กับโทเค็นสำหรับผู้ถือซึ่งมีค่าเป็นโทเค็น ตามที่ระบุไว้ในหมายเหตุการให้สิทธิ์สำหรับการติดตามการจัดส่งหรือกรณีการใช้งานประสิทธิภาพยานพาหนะแต่ละรายการ

ตัวอย่างต่อไปนี้แสดงโทเค็นสำหรับการดำเนินการต่องานจากเซิร์ฟเวอร์แบ็กเอนด์

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

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

    {
      "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"
       }
    }
  • สำหรับช่อง kid ในส่วนหัว ให้ระบุรหัสคีย์ส่วนตัวของบัญชีบริการ ค่านี้จะอยู่ในช่อง private_key_id ของไฟล์ JSON ของบัญชีบริการ
  • สำหรับช่อง iss และ sub ให้ระบุอีเมลของบัญชีบริการ คุณดูค่านี้ได้ในช่อง client_email ของไฟล์ JSON ของบัญชีบริการ
  • สำหรับช่อง aud ให้ระบุ https://SERVICE_NAME/
  • สำหรับช่อง iat ให้ระบุการประทับเวลาเมื่อสร้างโทเค็นเป็นหน่วยวินาทีที่ผ่านไปนับตั้งแต่ 00:00:00 น. ตามเขตเวลา UTC ของวันที่ 1 มกราคม 1970 ให้เวลาการเอียง 10 นาที หากการประทับเวลาอยู่ในอดีตหรือในอนาคตมากเกินไป เซิร์ฟเวอร์อาจรายงานข้อผิดพลาด
  • สำหรับช่อง exp ให้ระบุการประทับเวลาที่โทเค็นหมดอายุ เป็นวินาทีตั้งแต่ 00:00:00 น. ตามเขตเวลา UTC วันที่ 1 มกราคม 1970 ค่าที่แนะนำคือ iat + 3600

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