Published: May 09, 2025, Last updated: December 22, 2025
พาสคีย์ให้การตรวจสอบสิทธิ์ที่มีประสิทธิภาพและป้องกันฟิชชิงได้ แต่การกระตุ้นให้ผู้ใช้หันมาใช้พาสคีย์อาจทำให้เกิดความยุ่งยาก การสร้างพาสคีย์อัตโนมัติช่วยให้คุณสร้างพาสคีย์ให้ผู้ใช้ได้ในเวลาที่เหมาะสม ตราบใดที่ผู้ใช้บันทึกรหัสผ่านสำหรับเว็บไซต์ของคุณไว้แล้ว Conditional Create ซึ่งช่วยให้สร้างพาสคีย์อัตโนมัติได้เป็นส่วนหนึ่งของข้อกำหนด WebAuthn
วิธีการทำงาน
หากต้องการช่วยให้ผู้ใช้หันมาใช้พาสคีย์ได้สะดวกยิ่งขึ้น ให้ใช้ฟีเจอร์ WebAuthn API ที่เรียกว่า Conditional Create Conditional Create ช่วยให้เว็บไซต์ขอพาสคีย์สำหรับผู้ใช้ได้โดยไม่ต้องให้ผู้ใช้ดำเนินการใดๆ
โฟลว์นี้จะทำงานเมื่อเป็นไปตามเงื่อนไขต่อไปนี้
- ผู้ใช้มีรหัสผ่านที่บันทึกไว้ในเครื่องมือจัดการรหัสผ่านเริ่มต้น
- มีการใช้รหัสผ่านเมื่อไม่นานมานี้ ควรเรียก Conditional Create ทันทีหลังจากเข้าสู่ระบบด้วยรหัสผ่านสำเร็จ
หากเป็นไปตามเงื่อนไขทั้ง 2 ข้อ คุณสามารถขอให้เครื่องมือจัดการรหัสผ่านสร้างพาสคีย์ให้ผู้ใช้ได้โดยเรียก Conditional Create หลังจากสร้างพาสคีย์สำเร็จแล้ว ผู้ใช้จะได้รับการแจ้งเตือน ทั้งนี้ขึ้นอยู่กับเครื่องมือจัดการรหัสผ่าน
ความเข้ากันได้
Conditional Create ได้รับการรองรับโดย Safari ใน macOS และเบราว์เซอร์ทั้งหมดใน iOS, รวมถึง Chrome ในเดสก์ท็อป และ Chrome ใน Android.
การรองรับเหล่านี้หมายความว่าฟีเจอร์นี้จะทำงานในผู้ให้บริการพาสคีย์เริ่มต้นที่เกี่ยวข้อง ได้แก่ พวงกุญแจ iCloud (รหัสผ่าน) ใน Safari บน macOS และ iOS รวมถึงเครื่องมือจัดการรหัสผ่านบน Google ใน Chrome บนเดสก์ท็อปและ Android
เนื่องจาก iOS 18 ขึ้นไปและ Android 14 ขึ้นไปรองรับผู้ให้บริการพาสคีย์บุคคลที่สาม ดังนั้นการรองรับ Conditional Create จึงขึ้นอยู่กับผู้ให้บริการพาสคีย์ ไม่ว่าผู้ใช้จะใช้เบราว์เซอร์ใดก็ตาม หากผู้ให้บริการพาสคีย์ที่เลือกไม่รองรับ Conditional Create ระบบจะไม่สร้างพาสคีย์ใหม่
ใช้ Conditional Create
การสร้างพาสคีย์อัตโนมัติอิงตามฟีเจอร์ WebAuthn API ที่เรียกว่า Conditional Create ซึ่งเป็นคำขอ create() WebAuthn ปกติที่มี
mediation พารามิเตอร์ตั้งค่าเป็น "conditional" ซึ่งทำงานคล้ายกับการป้อนอัตโนมัติของพาสคีย์
สำหรับคำขอ get()
ใช้ Conditional Create หลังจากที่ผู้ใช้ลงชื่อเข้าใช้ด้วยรหัสผ่าน การสร้างจะสำเร็จหรือไม่ขึ้นอยู่กับเครื่องมือจัดการรหัสผ่านและเงื่อนไขบางอย่าง เงื่อนไขเหล่านี้อาจแตกต่างกันไปตามเครื่องมือจัดการรหัสผ่านและอาจมีการเปลี่ยนแปลงเมื่อเวลาผ่านไป ตัวอย่างเช่น ใน Chrome ที่ใช้เครื่องมือจัดการรหัสผ่านบน Google (GPM) ผู้ใช้ต้องลงชื่อเข้าใช้ด้วยรหัสผ่านที่บันทึกไว้สำหรับเว็บไซต์เมื่อไม่นานมานี้
หากเบราว์เซอร์สร้างพาสคีย์ได้สำเร็จ ระบบจะแสดงข้อมูลเข้าสู่ระบบคีย์สาธารณะ ส่งข้อมูลเข้าสู่ระบบนี้ไปยังแบ็กเอนด์ เพื่อลงทะเบียนให้เสร็จสมบูรณ์และเปิดใช้การตรวจสอบสิทธิ์ในอนาคต
การตรวจหาฟีเจอร์
คุณสามารถตรวจสอบว่า Conditional Create พร้อมใช้งานในเบราว์เซอร์หรือไม่โดยเรียกใช้ PublicKeyCredential.getClientCapabilities() ดูว่าออบเจ็กต์ที่แสดงผลมีค่า true สำหรับพร็อพเพอร์ตี้ conditionalCreate หรือไม่
if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.conditionalCreate) {
// Conditional create is available
}
}
หาก getClientCapabilities ไม่พร้อมใช้งาน แสดงว่า Conditional Create ก็ไม่พร้อมใช้งานเช่นกัน
สร้างพาสคีย์แบบมีเงื่อนไข
หากต้องการสร้างพาสคีย์อัตโนมัติ ให้เรียกใช้
navigator.credentials.create() แต่ใช้ mediation: "conditional" ดังนี้
const cred = await navigator.credentials.create({
publicKey: options,
// Request conditional creation
mediation: 'conditional'
});
คุณควรใช้การสร้างพาสคีย์อัตโนมัติทันทีหลังจากที่ผู้ใช้ลงชื่อเข้าใช้เพื่อให้มีโอกาสมากที่สุดที่จะเป็นไปตามเกณฑ์ของเครื่องมือจัดการรหัสผ่านสำหรับการสร้างอัตโนมัติ
คุณสามารถส่งข้อมูลเข้าสู่ระบบคีย์สาธารณะที่ได้ไปยังเซิร์ฟเวอร์เพื่อ ยืนยันและลงทะเบียนพาสคีย์ ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้ในเซิร์ฟเวอร์
คำเตือน
Conditional Create ไม่ได้ใช้งานยาก แต่มีข้อควรระวังหลายประการเมื่อผสานรวมฟีเจอร์นี้เข้ากับระบบที่มีอยู่
ไม่สนใจการแสดงตัวและการยืนยันตัวตนของผู้ใช้ในเซิร์ฟเวอร์
การตอบกลับการลงทะเบียนจะแสดงทั้ง "การแสดงตัวของผู้ใช้" และ "ผู้ใช้ได้รับการยืนยันแล้ว" เป็น
false ดังนั้นเซิร์ฟเวอร์ควรไม่สนใจแฟล็กเหล่านี้ระหว่างการยืนยันข้อมูลเข้าสู่ระบบ
ยกเลิกการเรียก WebAuthn ที่กำลังดำเนินการอยู่ก่อนที่จะสร้างพาสคีย์อัตโนมัติ
เมื่อ RP คาดหวังให้ผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์หรือรหัสผ่าน การดำเนินการ Conditional Get เป็นตัวเลือกที่ดีที่สุด ซึ่งอาจทำให้การเรียก Conditional Get ถูกยกเลิกก่อนที่จะดำเนินการ Conditional Create
หากต้องการทำเช่นนั้น คุณต้องใช้ AbortController และเรียกใช้ .abort()
// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();
const cred = await navigator.credentials.get({
publicKey: options,
signal: controller.signal,
// Request conditional get
mediation: 'conditional'
});
// Abort the call
controller.abort();
ไม่สนใจข้อยกเว้นอย่างเหมาะสม
เมื่อมีการสร้างพาสคีย์แบบมีเงื่อนไข คุณควรไม่สนใจข้อยกเว้นในกรณีต่อไปนี้
InvalidStateError: มีพาสคีย์อยู่ในผู้ให้บริการพาสคีย์อยู่แล้ว อย่าลืมระบุexcludeCredentials.NotAllowedError: การสร้างพาสคีย์ไม่เป็นไปตามเงื่อนไขAbortError: การเรียก WebAuthn ถูกยกเลิก
การแสดงข้อผิดพลาดในกรณีเหล่านี้อาจทำให้ผู้ใช้สับสนเนื่องจากเบราว์เซอร์จัดการข้อผิดพลาดเหล่านี้อย่างเงียบๆ โดยจะแสดงการแจ้งเตือนเมื่อสำเร็จเท่านั้น และความล้มเหลวจะไม่ทำให้เกิดข้อความที่มองเห็นได้
ส่งสัญญาณเมื่อลงทะเบียนพาสคีย์ไม่สำเร็จ
เมื่อสร้างพาสคีย์แล้วแต่ลงทะเบียนในเซิร์ฟเวอร์ไม่สำเร็จ ผู้ใช้จะพบกับความพยายามลงชื่อเข้าใช้ที่ไม่สำเร็จ ซึ่งอาจเกิดขึ้นเมื่อรายการพาสคีย์ไม่สอดคล้องกันระหว่างผู้ให้บริการพาสคีย์กับเซิร์ฟเวอร์
หากต้องการหลีกเลี่ยงสถานการณ์ดังกล่าว ให้ใช้ Signal API เพื่อให้รายการพาสคีย์สอดคล้องกัน
ไม่รองรับการอัปเกรดจากการลงชื่อเข้าใช้แบบไม่ใช้รหัสผ่าน
ในตอนนี้ การสร้างพาสคีย์แบบมีเงื่อนไขจะถูกจำกัดไว้หลังจากการป้อนรหัสผ่านที่ถูกต้องของผู้ใช้ ซึ่งหมายความว่าแนวทางการลงชื่อเข้าใช้แบบไม่ใช้รหัสผ่าน เช่น ลิงก์วิเศษ การยืนยันหมายเลขโทรศัพท์ หรือการผสานรวมข้อมูลประจำตัวจะไม่เป็นไปตามเงื่อนไข
สรุป
การสร้างพาสคีย์อัตโนมัติสามารถเร่งการนำพาสคีย์ไปใช้ในเว็บไซต์ของคุณ ซึ่งจะช่วยให้ผู้ใช้เว็บไซต์เปลี่ยนจากรหัสผ่านไปใช้วิธีการตรวจสอบสิทธิ์ที่ปลอดภัยยิ่งขึ้น
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับพาสคีย์ ให้เริ่มต้นจาก หัวข้อการเข้าสู่ระบบแบบไม่ใช้รหัสผ่านด้วยพาสคีย์