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

เกริ่นนำ

บาร์โค้ดจะหมุนเหมือนบาร์โค้ดปกติ แต่จะเปลี่ยนแปลงเป็นระยะๆ ทุกนาที และเทอร์มินัล/เครื่องอ่านก็ตั้งโปรแกรมให้ยอมรับเฉพาะบาร์โค้ดล่าสุดเท่านั้น มาตรการรักษาความปลอดภัยนี้จะช่วยลดความเสี่ยงที่เกี่ยวข้องกับการถ่ายภาพหน้าจอด้วยบาร์โค้ด โดยเฉพาะการขโมยตั๋วหรือการจำหน่ายตั๋วที่ไม่ได้รับอนุญาต การหมุนบาร์โค้ดยังทำหน้าที่เป็นข้อมูลสำรองสำหรับอุปกรณ์ที่ไม่สามารถ ใช้ประโยชน์จากการแตะอัจฉริยะได้ด้วย เนื่องจากไม่รองรับ 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 ที่กำหนดขอบเขตไว้สำหรับบัตรเดียว
  • คีย์คาดว่าคีย์จะใช้ได้ตลอดอายุการใช้งานของบัตร เว้นแต่จะมีการอัปเดต เราไม่คาดว่าจะมีการอัปเดตคีย์นี้ตามความถี่ในระหว่างการทำงานตามปกติ

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

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