การวางแนวพาสคีย์

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

1. ข้อกำหนดเบื้องต้นที่สำคัญสำหรับพาสคีย์

พาสคีย์อาศัย Web Authentication API (WebAuthn) ซึ่งกำหนดข้อจำกัดด้านความปลอดภัยแบบข้ามแพลตฟอร์มที่เข้มงวดซึ่งต้องเป็นไปตามข้อกำหนดก่อนที่จะพยายามติดตั้งใช้งาน ดังนี้

  • บริบทที่ปลอดภัย: เมธอด WebAuthn (navigator.credentials.create และ navigator.credentials.get) จะได้รับการควบคุมอย่างเข้มงวดภายใต้บริบทที่ปลอดภัย แอปพลิเคชันต้องทำงานบน https:// ในเวอร์ชันที่ใช้งานจริง หรือ http://localhost สำหรับการพัฒนาในเครื่อง
  • รหัส Relying Party (RP): ข้อมูลเข้าสู่ระบบทุกรายการจะเชื่อมโยงกับรหัส RP (โดยพื้นฐานแล้วคือชื่อโดเมนของแอปพลิเคชัน) รหัส RP ที่ส่งในตัวเลือกฝั่งเซิร์ฟเวอร์ต้องตรงกันหรือเป็นส่วนต่อท้ายที่ถูกต้องของชื่อโดเมนของต้นทางปัจจุบัน (เช่น example.com ใช้ได้กับ login.example.com) ความไม่ตรงกันจะส่งผลให้เกิดข้อยกเว้น SecurityError ในฝั่งไคลเอ็นต์

2. ข้อจำกัด UX ของ AAGUID

Authenticator Attestation Globally Unique Identifier (AAGUID) คือตัวระบุที่ไม่ซ้ำกัน 128 บิตที่แสดงในข้อมูลเอกสารรับรองการลงทะเบียนซึ่งแสดงถึงรุ่น/ผู้ให้บริการของ Authenticator (เช่น เครื่องมือจัดการรหัสผ่านบน Google, iCloud Keychain, 1Password)

  • คำแนะนำ UX เท่านั้น: ฝ่ายที่เชื่อถือต้องใช้ AAGUID สำหรับคำแนะนำ UX เท่านั้น (เช่น การแสดงชื่อและไอคอนของผู้ให้บริการพาสคีย์ในรายการการจัดการเพื่อช่วยเหลือผู้ใช้)
  • ไม่มีการพึ่งพาด้านความปลอดภัย: แอปพลิเคชันต้องไม่ใช้ AAGUID เพื่อการรักษาความปลอดภัยด้วยวิทยาการเข้ารหัสหรือการตัดสินใจในการเข้าถึง ปัจจุบันพาสคีย์ของแพลตฟอร์มไม่มีการรับรองการเข้ารหัสสำหรับ AAGUID ซึ่งหมายความว่า User Agent สามารถแก้ไขหรือจำลองได้

3. คำแนะนำเกี่ยวกับคลังที่แยกออกมา

สำหรับการสร้างตัวเลือก FIDO2/WebAuthn แบ็กเอนด์และการยืนยันลายเซ็น นักพัฒนาแอปต้องใช้ไลบรารีโอเพนซอร์สที่ผ่านการตรวจสอบแล้วตามภาษาแทนการใช้วิทยาการเข้ารหัสที่สร้างขึ้นเอง ดังนี้

  • JavaScript/TypeScript: SimpleWebAuthn (github.com/MasterKale/SimpleWebAuthn)
  • Python: py_webauthn (github.com/duo-labs/py_webauthn)
  • Java: Java WebAuthn Server (github.com/Yubico/java-webauthn-server), WebAuthn4J (github.com/webauthn4j/webauthn4j)
  • .NET: ไลบรารี .NET สำหรับ FIDO2 (github.com/abergs/fido2-net-lib)
  • Go: WebAuthn Go Library (github.com/go-webauthn/webauthn)
  • Ruby: WebAuthn Ruby (github.com/cedarcode/webauthn-ruby)
  • PHP: WebAuthn Framework (github.com/web-auth/webauthn-framework)

4. เมทริกซ์อ้างอิงกรณีการใช้งาน

ระบุกรณีการใช้งานที่ตรงกันด้านล่างและดูคู่มือการติดตั้งใช้งานฉบับเต็ม กรณีการใช้งานทุกกรณีมี API ที่สำคัญ (PublicKeyCredential.parseCreationOptionsFromJSON, parseRequestOptionsFromJSON, signalAllAcceptedCredentials, signalCurrentUserDetails, signalUnknownCredential, สื่อกลางแบบมีเงื่อนไข, การจัดการ AAGUID ฯลฯ) ซึ่งระบุไว้ในคู่มือเฉพาะกรณีการใช้งานเท่านั้น อย่าข้ามขั้นตอนการดึงข้อมูลนี้ และอย่าใช้ Wrapper ของไลบรารีของบุคคลที่สาม (เช่น startAuthentication/startRegistration ของ SimpleWebAuthn) แทนในฝั่งไคลเอ็นต์ ให้เรียกใช้ WebAuthn Browser API แบบเนทีฟโดยตรง คำแนะนำเกี่ยวกับไลบรารีในส่วนที่ 3 มีผลกับฝั่งเซิร์ฟเวอร์ (การยืนยัน FIDO2 แบ็กเอนด์) เท่านั้น

รายละเอียดการติดตั้งใช้งานพาสคีย์และ WebAuthn ที่เฉพาะเจาะจงจะแมปกับคำแนะนำต่อไปนี้