การหมุนเวียนบาร์โค้ด

บทนำ

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

เอกสารอ้างอิง API

ดูรายละเอียดทางเทคนิคเกี่ยวกับบาร์โค้ดแบบหมุนได้ที่ประเภท RotatingBarcode

ตัวอย่างเพย์โหลด

JSON
{
  "rotatingBarcode": {
    "type": "QR_CODE",
    "valuePattern": "MyRotatingBarcode-{totp_timestamp_seconds}-{totp_value_0}",
    "alternateText": "Ticket#: 1234567890",
    "totpDetails": {
      "algorithm": "TOTP_SHA1",
      "periodMillis": "3000",
      "parameters": [
        {
          "key": "3132333435363738393031323334353637383930",
          "valueLength": "8"
        }
      ]
    }
  }
}

กลไกสำรอง

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

  1. การแตะอัจฉริยะ: หากมีการระบุเพย์โหลดการแตะอัจฉริยะและอุปกรณ์รองรับ NFC/HCE
    • โปรดทราบว่าผู้ใช้สามารถลบล้างการตั้งค่านี้ได้โดยการคลิก "แสดงรหัส" ซึ่งจะบังคับให้แสดงบาร์โค้ดแบบหมุน/บาร์โค้ดแบบคงที่
  2. บาร์โค้ดแบบหมุน: หากระบุเพย์โหลดบาร์โค้ดแบบหมุน
  3. บาร์โค้ดแบบคงที่: หากระบุเพย์โหลดบาร์โค้ด

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

บันทึกโฟลว์

Google Wallet API มีขั้นตอนต่างๆ ดังนี้

  • การสร้างชั้นเรียนโปรแกรมสะสมคะแนนในเวลาที่สะดวกหรือล่วงหน้า
  • การส่งออบเจ็กต์ที่สมบูรณ์ใน JWT หรือบันทึกออบเจ็กต์ไว้ล่วงหน้าแล้วอ้างอิงด้วยรหัสใน JWT
  • การอัปเดตออบเจ็กต์หลังจากบันทึกแล้ว

ช่อง rotatingBarcode ที่เสนอใช้ได้กับขั้นตอนเหล่านี้ทั้งหมด แต่เราขอแนะนำให้ทำดังนี้เพื่อปรับปรุงความปลอดภัย

  • เรียกใช้ object:insert API เพื่อแทรกบัตรลงในเซิร์ฟเวอร์ Google Wallet และกำหนดค่าปุ่ม "เพิ่มลงใน Google Wallet" เพื่ออ้างอิงออบเจ็กต์ที่เฉพาะเจาะจงตามรหัสใน JWT วิธีนี้ช่วยให้มั่นใจว่า JWT ที่ได้จะไม่มีคีย์ลับของบาร์โค้ดแบบหมุน
  • ใช้คีย์ลับ OTP ที่มีขอบเขตเป็นบัตรผ่านใบเดียว
  • คีย์จะใช้งานได้ตลอดอายุการใช้งานของบัตร เว้นแต่จะมีการอัปเดต เราคาดว่าคีย์นี้จะไม่มีการอัปเดตตามความถี่ใดๆ ในระหว่างการดําเนินการตามปกติ

แผนภาพลำดับต่อไปนี้แสดงขั้นตอนต่างๆ ระหว่างผู้เข้าร่วมต่างๆ สำหรับการผสานรวมทั่วไป

แผนภาพลำดับขั้นสำหรับการใช้บาร์โค้ดแบบหมุน