สร้างประสบการณ์การลงชื่อเข้าใช้ที่ใช้ประโยชน์จากพาสคีย์ในขณะที่ยังรองรับ ผู้ใช้รหัสผ่านที่มีอยู่
คำแนะนำนี้จะอธิบายวิธีใช้การป้อนข้อความอัตโนมัติในแบบฟอร์มเพื่อให้ผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์ควบคู่ไปกับรหัสผ่าน การใช้การป้อนข้อความอัตโนมัติในแบบฟอร์มจะช่วยสร้างประสบการณ์การลงชื่อเข้าใช้ที่เป็นหนึ่งเดียว ซึ่งจะช่วยลดความซับซ้อนในการเปลี่ยนจากรหัสผ่านไปใช้วิธีการตรวจสอบสิทธิ์ด้วยพาสคีย์ที่ปลอดภัยและใช้ง่ายกว่า
ดูวิธีใช้ UI แบบมีเงื่อนไขของ WebAuthn เพื่อรองรับทั้งผู้ใช้พาสคีย์และผู้ใช้รหัสผ่านโดยลดอุปสรรคในแบบฟอร์มลงชื่อเข้าใช้ที่มีอยู่ให้เหลือน้อยที่สุด
เหตุใดจึงควรใช้การป้อนข้อความอัตโนมัติในแบบฟอร์มเพื่อลงชื่อเข้าใช้ด้วยพาสคีย์
พาสคีย์ช่วยให้ผู้ใช้ลงชื่อเข้าใช้เว็บไซต์โดยใช้ลายนิ้วมือ ใบหน้า หรือ PIN ของอุปกรณ์
หากผู้ใช้ทุกคนมีพาสคีย์ ขั้นตอนการตรวจสอบสิทธิ์ก็อาจเป็นปุ่มลงชื่อเข้าใช้เพียงครั้งเดียว การแตะปุ่มจะช่วยให้ผู้ใช้ยืนยันบัญชีด้วย การล็อกหน้าจอและลงชื่อเข้าใช้ได้โดยตรง
อย่างไรก็ตาม การเปลี่ยนจากรหัสผ่านเป็นพาสคีย์ก็มีข้อจำกัด เว็บไซต์ ต้องรองรับทั้งผู้ใช้รหัสผ่านและพาสคีย์ในช่วงนี้ การคาดหวังให้ผู้ใช้จดจำว่าเว็บไซต์ใดใช้พาสคีย์และขอให้ผู้ใช้เลือกวิธีการลงชื่อเข้าใช้ตั้งแต่แรกจะทำให้ผู้ใช้ได้รับประสบการณ์ในการใช้งานที่ไม่ดี
พาสคีย์ยังเป็นเทคโนโลยีใหม่ และการอธิบายให้เข้าใจอย่างชัดเจนอาจเป็นเรื่องยาก การใช้อินเทอร์เฟซการป้อนข้อความอัตโนมัติที่คุ้นเคยจะช่วยแก้ปัญหาทั้งความท้าทายในการเปลี่ยนผ่านและความจำเป็นที่ผู้ใช้ต้องคุ้นเคย
ใช้ UI แบบมีเงื่อนไข
หากต้องการรองรับทั้งผู้ใช้พาสคีย์และรหัสผ่านอย่างมีประสิทธิภาพ ให้รวมพาสคีย์ไว้ในคำแนะนำการป้อนข้อความอัตโนมัติของแบบฟอร์ม แนวทางนี้ ใช้ UI แบบมีเงื่อนไข ซึ่งเป็นฟีเจอร์ของ มาตรฐาน WebAuthn
เมื่อผู้ใช้โฟกัสที่ช่องป้อนข้อมูลชื่อผู้ใช้ กล่องโต้ตอบการป้อนข้อความอัตโนมัติจะปรากฏขึ้น โดยแนะนำพาสคีย์ที่จัดเก็บไว้พร้อมกับรหัสผ่านที่บันทึกไว้ ผู้ใช้สามารถเลือก พาสคีย์หรือรหัสผ่าน แล้วลงชื่อเข้าใช้โดยใช้การล็อกหน้าจอของอุปกรณ์หากเลือกพาสคีย์
ซึ่งจะช่วยให้ผู้ใช้ลงชื่อเข้าใช้เว็บไซต์ของคุณด้วยแบบฟอร์มลงชื่อเข้าใช้ที่มีอยู่ได้ แต่จะ มีประโยชน์ด้านความปลอดภัยเพิ่มเติมจากพาสคีย์ หากผู้ใช้มีพาสคีย์
วิธีการทำงานของการตรวจสอบสิทธิ์ด้วยพาสคีย์
หากต้องการตรวจสอบสิทธิ์ด้วยพาสคีย์ ให้ใช้ WebAuthn API
องค์ประกอบ 4 อย่างในขั้นตอนการตรวจสอบสิทธิ์ด้วยพาสคีย์มีดังนี้
- แบ็กเอนด์: จัดเก็บรายละเอียดบัญชีผู้ใช้ รวมถึงคีย์สาธารณะ
- ฟรอนท์เอนด์: สื่อสารกับเบราว์เซอร์และดึงข้อมูลที่จำเป็น จากแบ็กเอนด์
- เบราว์เซอร์: เรียกใช้ JavaScript และโต้ตอบกับ WebAuthn API
- ผู้ให้บริการพาสคีย์: สร้างและจัดเก็บพาสคีย์ โดยปกติแล้วจะเป็น เครื่องมือจัดการรหัสผ่าน เช่น เครื่องมือจัดการรหัสผ่านบน Google หรือคีย์ความปลอดภัย
กระบวนการตรวจสอบสิทธิ์ด้วยพาสคีย์จะเป็นไปตามขั้นตอนต่อไปนี้
- ผู้ใช้ไปที่หน้าลงชื่อเข้าใช้ และฟรอนท์เอนด์ขอคำถามในการตรวจสอบสิทธิ์จากแบ็กเอนด์
- แบ็กเอนด์จะสร้างและส่งคืนคำท้า WebAuthn ที่เชื่อมโยง กับบัญชีของผู้ใช้
- ส่วนหน้าเรียกใช้
navigator.credentials.get()พร้อมกับชาเลนจ์ เพื่อเริ่มการตรวจสอบสิทธิ์โดยใช้เบราว์เซอร์ - เบราว์เซอร์ที่โต้ตอบกับผู้ให้บริการพาสคีย์จะแจ้งให้ผู้ใช้เลือกพาสคีย์ (มักใช้กล่องโต้ตอบการป้อนข้อความอัตโนมัติที่ทริกเกอร์โดยการโฟกัสช่องลงชื่อเข้าใช้) และยืนยันตัวตนโดยใช้การล็อกหน้าจอของอุปกรณ์หรือไบโอเมตริก
- หลังจากยืนยันผู้ใช้เรียบร้อยแล้ว ผู้ให้บริการพาสคีย์จะลงชื่อใน ชาเลนจ์ และเบราว์เซอร์จะส่งคืนข้อมูลเข้าสู่ระบบคีย์สาธารณะที่ได้ (รวมถึงลายเซ็น) ไปยังส่วนหน้า
- ฟรอนท์เอนด์จะส่งข้อมูลเข้าสู่ระบบนี้ไปยังแบ็กเอนด์
- แบ็กเอนด์จะยืนยันลายเซ็นของข้อมูลเข้าสู่ระบบกับคีย์สาธารณะที่ จัดเก็บไว้ของผู้ใช้ หากการยืนยันสำเร็จ แบ็กเอนด์จะลงชื่อเข้าใช้ให้ผู้ใช้
ตรวจสอบสิทธิ์ด้วยพาสคีย์ผ่านการป้อนข้อความอัตโนมัติในแบบฟอร์ม
หากต้องการเริ่มการตรวจสอบสิทธิ์ด้วยพาสคีย์โดยใช้การป้อนข้อความอัตโนมัติในแบบฟอร์ม ให้เรียกใช้ WebAuthn get แบบมีเงื่อนไขเมื่อหน้าลงชื่อเข้าใช้โหลด การเรียกใช้
navigator.credentials.get()นี้มีตัวเลือก mediation: 'conditional'
คำขอแบบมีเงื่อนไขไปยัง API ของ WebAuthn
navigator.credentials.get() จะไม่แสดง UI ทันที แต่จะ
รอในสถานะรอดำเนินการจนกว่าผู้ใช้จะโต้ตอบกับพรอมต์เติมข้อความอัตโนมัติของช่องชื่อผู้ใช้ หากผู้ใช้เลือกพาสคีย์ เบราว์เซอร์จะแก้ไขสัญญาที่รอดำเนินการด้วยข้อมูลเข้าสู่ระบบเพื่อลงชื่อเข้าใช้ผู้ใช้ โดยข้ามการส่งแบบฟอร์มแบบเดิม หากผู้ใช้เลือกใช้รหัสผ่านแทน ระบบจะไม่ดำเนินการตามสัญญา และขั้นตอนการลงชื่อเข้าใช้ด้วยรหัสผ่านมาตรฐานจะดำเนินต่อไป จากนั้นหน้าที่รับผิดชอบในการลงชื่อเข้าใช้ของผู้ใช้จะเป็นของหน้าเว็บ
ใส่คำอธิบายประกอบช่องป้อนข้อมูลแบบฟอร์ม
หากต้องการเปิดใช้การป้อนข้อความอัตโนมัติของพาสคีย์ ให้เพิ่มแอตทริบิวต์ autocomplete ลงในช่อง
ชื่อผู้ใช้inputของแบบฟอร์ม ระบุทั้ง username และ webauthn เป็นค่าที่คั่นด้วยช่องว่าง
<input type="text" name="username" autocomplete="username webauthn" autofocus>
การเพิ่ม autofocus ลงในช่องนี้จะทริกเกอร์ข้อความแจ้งการป้อนอัตโนมัติเมื่อการโหลดหน้าเว็บโดยอัตโนมัติ ซึ่งจะแสดงรหัสผ่านและพาสคีย์ที่ใช้ได้ทันที
การตรวจหาฟีเจอร์
ก่อนเรียกใช้การเรียก API ของ WebAuthn แบบมีเงื่อนไข ให้ตรวจสอบว่า
- เบราว์เซอร์รองรับ WebAuthn ด้วย
PublicKeyCredential
- เบราว์เซอร์รองรับการตรวจหาความสามารถด้วย
PublicKeyCredential.getClientCapabilities()
- เบราว์เซอร์รองรับ UI แบบมีเงื่อนไขของ WebAuthn ที่มี
conditionalGet
ข้อมูลโค้ดต่อไปนี้แสดงวิธีตรวจสอบว่าเบราว์เซอร์รองรับฟีเจอร์เหล่านี้หรือไม่
if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
const capabilities = await PublicKeyCredential.getClientCapabilities();
// Check if conditional mediation is available.
if (capabilities.conditionalGet === true) {
// The browser supports conditional mediation.
}
}
ดึงข้อมูลจากแบ็กเอนด์
แบ็กเอนด์ต้องมีตัวเลือกหลายอย่างให้ฟรอนต์เอนด์เพื่อเริ่มการเรียกใช้ navigator.credentials.get() โดยปกติแล้ว ระบบจะดึงตัวเลือกเหล่านี้เป็นออบเจ็กต์ JSON จากปลายทางในเซิร์ฟเวอร์
พร็อพเพอร์ตี้หลักในออบเจ็กต์ตัวเลือกมีดังนี้
challenge: คำท้าที่เซิร์ฟเวอร์สร้างขึ้นใน ArrayBuffer (โดยปกติจะเข้ารหัส Base64URL สำหรับการรับส่ง JSON) ซึ่งเป็นสิ่งจำเป็นในการป้องกันการโจมตีแบบเล่นซ้ำ เซิร์ฟเวอร์ต้องสร้างคำท้าใหม่ทุกครั้งที่มีการพยายามลงชื่อเข้าใช้ และควรทำให้คำท้าดังกล่าวใช้ไม่ได้หลังจากผ่านไปไม่นานหรือหากการพยายามไม่สำเร็จallowCredentials: อาร์เรย์ของตัวอธิบายข้อมูลเข้าสู่ระบบ ส่งอาร์เรย์ที่ว่างเปล่า ซึ่งจะแจ้ง ให้เบราว์เซอร์แสดงข้อมูลเข้าสู่ระบบทั้งหมดสำหรับrpIdที่ระบุuserVerification: ระบุค่ากำหนดสำหรับการยืนยันผู้ใช้ เช่น การกำหนดให้ใช้การล็อกหน้าจอ อุปกรณ์ ค่าเริ่มต้นและค่าที่แนะนำคือ"preferred"ค่าที่เป็นไปได้มีดังนี้"required": Authenticator ต้องทำการยืนยันผู้ใช้ (เช่น PIN หรือข้อมูลไบโอเมตริก) การดำเนินการจะล้มเหลวหากดำเนินการยืนยันไม่ได้"preferred": เครื่องมือตรวจสอบพยายามยืนยันผู้ใช้ แต่ การดำเนินการอาจสำเร็จได้โดยไม่ต้องยืนยัน"discouraged": Authenticator ควรหลีกเลี่ยงการยืนยันผู้ใช้หากเป็นไปได้
rpId: รหัสผู้ให้บริการที่เกี่ยวข้อง ซึ่งโดยทั่วไปคือโดเมนของเว็บไซต์ (เช่นexample.com) ค่านี้ต้องตรงกับrp.idที่ใช้เมื่อสร้างข้อมูลเข้าสู่ระบบพาสคีย์
เซิร์ฟเวอร์ควรสร้างออบเจ็กต์ตัวเลือกนี้ ค่า ArrayBuffer (เช่น
challenge) ต้องเข้ารหัส Base64URL สำหรับการรับส่ง JSON ในส่วนฟรอนท์เอนด์
หลังจากแยกวิเคราะห์ JSON แล้ว ให้ใช้
PublicKeyCredential.parseRequestOptionsFromJSON()
เพื่อแปลงออบเจ็กต์ (รวมถึงการถอดรหัสสตริง Base64URL) เป็นรูปแบบที่
navigator.credentials.get() คาดหวัง
ข้อมูลโค้ดต่อไปนี้แสดงวิธีดึงและถอดรหัสข้อมูล ที่จำเป็นในการตรวจสอบสิทธิ์ด้วยพาสคีย์
// Fetch an encoded PubicKeyCredentialRequestOptions from the server.
const _options = await fetch('/webauthn/signinRequest');
// Deserialize and decode the PublicKeyCredentialRequestOptions.
const decoded_options = JSON.parse(_options);
const options = PublicKeyCredential.parseRequestOptionsFromJSON(decoded_options);
...
เรียกใช้ WebAuthn API ด้วยแฟล็ก conditional เพื่อตรวจสอบสิทธิ์ผู้ใช้
เมื่อเตรียมออบเจ็กต์ publicKeyCredentialRequestOptions (เรียกว่า
options ในโค้ดตัวอย่างด้านล่าง) แล้ว ให้เรียกใช้
navigator.credentials.get() เพื่อเริ่มการตรวจสอบสิทธิ์ด้วยพาสคีย์แบบมีเงื่อนไข
// To abort a WebAuthn call, instantiate an AbortController.
const abortController = new AbortController();
// Invoke WebAuthn to authenticate with a passkey.
const credential = await navigator.credentials.get({
publicKey: options,
signal: abortController.signal,
// Specify 'conditional' to activate conditional UI
mediation: 'conditional'
});
พารามิเตอร์หลักสำหรับการเรียกนี้มีดังนี้
publicKey: ต้องเป็นออบเจ็กต์publicKeyCredentialRequestOptions(ชื่อoptionsในตัวอย่าง) ที่คุณดึงข้อมูลจากเซิร์ฟเวอร์และ ประมวลผลในขั้นตอนก่อนหน้าsignal: การส่งสัญญาณของAbortController(เช่นabortController.signal) ช่วยให้คุณยกเลิกคำขอget()ได้โดยอัตโนมัติ ซึ่งจะเป็นประโยชน์เมื่อคุณต้องการเรียกใช้ WebAuthn อื่นmediation: 'conditional': นี่คือฟีเจอร์สำคัญที่ทำให้การเรียกใช้ WebAuthn เป็นแบบมีเงื่อนไข ซึ่งจะบอกให้เบราว์เซอร์รอการโต้ตอบของผู้ใช้ กับข้อความแจ้งป้อนข้อความอัตโนมัติ แทนที่จะแสดงกล่องโต้ตอบแบบโมดอล ทันที
ส่งข้อมูลเข้าสู่ระบบคีย์สาธารณะที่ส่งคืนไปยังเซิร์ฟเวอร์ RP
Aหากผู้ใช้เลือกพาสคีย์และยืนยันตัวตนสำเร็จ (เช่น ใช้การล็อกหน้าจอของอุปกรณ์) navigator.credentials.get()
Promise จะได้รับการแก้ไข ซึ่งจะแสดงผลออบเจ็กต์ PublicKeyCredential
ไปยังส่วนหน้า
ระบบอาจปฏิเสธคำสัญญาด้วยเหตุผลหลายประการ คุณควรจัดการข้อผิดพลาดเหล่านี้
ในโค้ดโดยตรวจสอบพร็อพเพอร์ตี้ name ของออบเจ็กต์ Error
NotAllowedError: ผู้ใช้ยกเลิกการดำเนินการ หรือไม่ได้เลือกพาสคีย์AbortError: การดำเนินการถูกยกเลิก ซึ่งอาจเกิดจากโค้ดของคุณที่ใช้AbortController- ข้อยกเว้นอื่นๆ: เกิดข้อผิดพลาดที่ไม่คาดคิด โดยปกติเบราว์เซอร์จะ แสดงกล่องโต้ตอบข้อผิดพลาดต่อผู้ใช้
ออบเจ็กต์ PublicKeyCredential มีพร็อพเพอร์ตี้หลายรายการ พร็อพเพอร์ตี้หลัก
ที่เกี่ยวข้องกับการตรวจสอบสิทธิ์มีดังนี้
id: รหัสที่เข้ารหัส Base64url ของข้อมูลเข้าสู่ระบบพาสคีย์ที่ได้รับการตรวจสอบสิทธิ์rawIdรหัสข้อมูลเข้าสู่ระบบเวอร์ชัน ArrayBufferresponse.clientDataJSON: ArrayBuffer ของข้อมูลไคลเอ็นต์ ฟิลด์นี้มีข้อมูล เช่น ชาเลนจ์และต้นทางที่เซิร์ฟเวอร์ต้องยืนยันresponse.authenticatorData: ArrayBuffer ของข้อมูลเครื่องมือตรวจสอบสิทธิ์ ฟิลด์นี้มีข้อมูล เช่น รหัส RPresponse.signature: ArrayBuffer ที่มีลายเซ็น ค่านี้เป็นหัวใจสำคัญของ ข้อมูลเข้าสู่ระบบ และเซิร์ฟเวอร์ของคุณต้องยืนยันลายเซ็นนี้โดยใช้ คีย์สาธารณะที่จัดเก็บไว้สำหรับข้อมูลเข้าสู่ระบบresponse.userHandle: ArrayBuffer ที่มีรหัสผู้ใช้ที่ระบุระหว่างการลงทะเบียนพาสคีย์authenticatorAttachment: ระบุว่าเครื่องมือตรวจสอบสิทธิ์เป็นส่วนหนึ่งของอุปกรณ์ไคลเอ็นต์ (platform) หรือ ภายนอก (cross-platform) การแนบcross-platformอาจเกิดขึ้น หาก ผู้ใช้ลงชื่อเข้าใช้ด้วยโทรศัพท์ ในกรณีดังกล่าว ให้พิจารณาแจ้งให้ผู้ใช้สร้างพาสคีย์ ในอุปกรณ์ปัจจุบันเพื่อความสะดวกในอนาคตtype: ช่องนี้จะตั้งค่าเป็น"public-key"เสมอ
หากต้องการส่งออบเจ็กต์ PublicKeyCredential นี้ไปยังแบ็กเอนด์ ให้เรียกใช้เมธอด
.toJSON()
ก่อน เมธอดนี้จะสร้างข้อมูลเข้าสู่ระบบเวอร์ชันที่แปลงเป็น JSON ได้ ซึ่งจะจัดการการแปลงพร็อพเพอร์ตี้ ArrayBuffer (เช่น rawId,
clientDataJSON, authenticatorData, signature และ userHandle) เป็นสตริงที่เข้ารหัส Base64URL ได้อย่างถูกต้อง จากนั้นใช้ JSON.stringify() เพื่อแปลงออบเจ็กต์นี้
เป็นสตริงและส่งในเนื้อหาของคำขอไปยังเซิร์ฟเวอร์
...
// Encode and serialize the PublicKeyCredential.
const _result = credential.toJSON();
const result = JSON.stringify(_result);
// Encode and send the credential to the server for verification.
const response = await fetch('/webauthn/signinResponse', {
method: 'post',
credentials: 'same-origin',
body: result
});
ยืนยันลายเซ็น
เมื่อเซิร์ฟเวอร์แบ็กเอนด์ได้รับข้อมูลเข้าสู่ระบบคีย์สาธารณะ เซิร์ฟเวอร์จะต้องยืนยันความถูกต้องของข้อมูลเข้าสู่ระบบ ซึ่งรวมถึง
- กำลังแยกวิเคราะห์ข้อมูลเข้าสู่ระบบ
- ค้นหาคีย์สาธารณะที่จัดเก็บไว้ซึ่งเชื่อมโยงกับ
idของข้อมูลเข้าสู่ระบบ - การยืนยัน
signatureที่ได้รับกับคีย์สาธารณะที่จัดเก็บไว้ - การตรวจสอบข้อมูลอื่นๆ เช่น คำท้าและต้นทาง
เราขอแนะนำให้ใช้ไลบรารี FIDO/WebAuthn ฝั่งเซิร์ฟเวอร์เพื่อจัดการการดำเนินการเข้ารหัสเหล่านี้อย่างปลอดภัย คุณจะค้นหาไลบรารีโอเพนซอร์สได้ในที่เก็บ awesome-webauthn ของ GitHub
หากลายเซ็นและการยืนยันอื่นๆ ทั้งหมดถูกต้อง เซิร์ฟเวอร์จะลงชื่อเข้าใช้ ผู้ใช้ได้ ดูขั้นตอนการตรวจสอบฝั่งเซิร์ฟเวอร์โดยละเอียดได้ที่ การตรวจสอบสิทธิ์ด้วยพาสคีย์ฝั่งเซิร์ฟเวอร์
ส่งสัญญาณหากไม่พบข้อมูลเข้าสู่ระบบที่ตรงกันในแบ็กเอนด์
หากเซิร์ฟเวอร์แบ็กเอนด์ไม่พบข้อมูลเข้าสู่ระบบที่มีรหัสที่ตรงกันในระหว่างการลงชื่อเข้าใช้ ผู้ใช้อาจลบรหัสผ่านนี้ออกจากเซิร์ฟเวอร์ของคุณก่อนหน้านี้ แต่ไม่ได้ลบออกจากผู้ให้บริการรหัสผ่าน ความไม่ตรงกันนี้อาจทำให้ผู้ใช้ได้รับประสบการณ์ที่สับสนหากผู้ให้บริการพาสคีย์ยังคงแนะนำพาสคีย์ที่ใช้กับเว็บไซต์ของคุณไม่ได้อีกต่อไป หากต้องการปรับปรุงเรื่องนี้ คุณควรแจ้งผู้ให้บริการพาสคีย์ให้ นำพาสคีย์ที่ไม่มีเจ้าของออก
คุณสามารถใช้วิธี PublicKeyCredential.signalUnknownCredential() ซึ่งเป็นส่วนหนึ่งของ Webauthn Signal API เพื่อแจ้งผู้ให้บริการพาสคีย์ว่ามีการนำข้อมูลเข้าสู่ระบบที่ระบุออกแล้วหรือไม่มีอยู่ เรียกใช้เมธอดแบบคงที่นี้ในฝั่งไคลเอ็นต์หากเซิร์ฟเวอร์ระบุ (เช่น ด้วยรหัสสถานะ HTTP ที่เฉพาะเจาะจง เช่น 404) ว่าไม่รู้จักรหัสข้อมูลเข้าสู่ระบบที่แสดง ระบุรหัส RP และรหัสข้อมูลเข้าสู่ระบบที่ไม่รู้จักให้กับเมธอดนี้ ผู้ให้บริการพาสคีย์ควรนำพาสคีย์ออกหากรองรับสัญญาณ
// Detect authentication failure due to lack of the credential
if (response.status === 404) {
// Feature detection
if (PublicKeyCredential.signalUnknownCredential) {
await PublicKeyCredential.signalUnknownCredential({
rpId: "example.com",
credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
});
} else {
// Encourage the user to delete the passkey from the password manager nevertheless.
...
}
}
หลังการตรวจสอบสิทธิ์
เราจะแนะนำขั้นตอนที่แตกต่างกันให้ทำตามโดยขึ้นอยู่กับวิธีที่ผู้ใช้ลงชื่อเข้าใช้
หากผู้ใช้ลงชื่อเข้าใช้โดยไม่มีพาสคีย์
หากผู้ใช้ลงชื่อเข้าใช้เว็บไซต์ของคุณโดยไม่มีพาสคีย์ ผู้ใช้อาจไม่ได้ลงทะเบียนพาสคีย์สำหรับบัญชีนั้นหรือในอุปกรณ์ปัจจุบัน นี่เป็นช่วงเวลาที่เหมาะสมในการกระตุ้นให้ผู้ใช้สร้างพาสคีย์ ลองพิจารณาวิธีต่อไปนี้
- อัปเกรดรหัสผ่านเป็นพาสคีย์: ใช้การสร้างแบบมีเงื่อนไข ซึ่งเป็นฟีเจอร์ของ WebAuthn ที่อนุญาตให้เบราว์เซอร์สร้างพาสคีย์สำหรับ ผู้ใช้โดยอัตโนมัติหลังจากลงชื่อเข้าใช้ด้วยรหัสผ่านสำเร็จ ซึ่งจะช่วยปรับปรุง การใช้พาสคีย์ได้อย่างมากด้วยการลดความซับซ้อนของกระบวนการสร้าง ดูวิธีการทำงาน และวิธีติดตั้งใช้งานที่ช่วยให้ผู้ใช้ใช้พาสคีย์ได้อย่างราบรื่นยิ่งขึ้น
- แจ้งให้สร้างพาสคีย์ด้วยตนเอง: กระตุ้นให้ผู้ใช้สร้างพาสคีย์ ซึ่งจะมีประสิทธิภาพหลังจากที่ผู้ใช้ทำกระบวนการลงชื่อเข้าใช้ที่ซับซ้อนมากขึ้น เช่น การตรวจสอบสิทธิ์แบบหลายปัจจัย (MFA) เสร็จแล้ว อย่างไรก็ตาม โปรดหลีกเลี่ยงการแจ้งเตือนมากเกินไป ซึ่งอาจรบกวนประสบการณ์ของผู้ใช้"
ดูวิธีกระตุ้นให้ผู้ใช้สร้างพาสคีย์และดูแนวทางปฏิบัติอื่นๆ ที่ดีได้ที่ตัวอย่างในการสื่อสารเรื่องพาสคีย์กับผู้ใช้
หากผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์สำเร็จแล้ว คุณจะมีโอกาสหลายครั้งในการปรับปรุงประสบการณ์ของผู้ใช้ให้ดียิ่งขึ้นและรักษาความสอดคล้องของบัญชี
กระตุ้นให้สร้างพาสคีย์ใหม่หลังจากการตรวจสอบสิทธิ์ข้ามอุปกรณ์
หากผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์โดยใช้กลไกข้ามอุปกรณ์ (เช่น การสแกนคิวอาร์โค้ดด้วยโทรศัพท์) ระบบอาจไม่จัดเก็บพาสคีย์ที่ใช้ ไว้ในเครื่องบนอุปกรณ์ที่ผู้ใช้ลงชื่อเข้าใช้ ซึ่งอาจเกิดขึ้นได้ในกรณีต่อไปนี้
- มีพาสคีย์ แต่ใช้ผู้ให้บริการพาสคีย์ที่ไม่รองรับระบบปฏิบัติการหรือเบราว์เซอร์ที่ใช้ลงชื่อเข้าใช้
- ผู้ใช้เสียสิทธิ์เข้าถึงผู้ให้บริการพาสคีย์ในอุปกรณ์ที่ใช้ลงชื่อเข้าใช้ แต่พาสคีย์ยังคงพร้อมใช้งานในอุปกรณ์อื่น
ในกรณีนี้ ให้พิจารณาแจ้งให้ผู้ใช้สร้างพาสคีย์ใหม่ใน
อุปกรณ์ปัจจุบัน ซึ่งจะช่วยให้ผู้ใช้ไม่ต้องลงชื่อเข้าใช้ข้ามอุปกรณ์ซ้ำอีกในอนาคต หากต้องการตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้โดยใช้พาสคีย์แบบข้ามอุปกรณ์หรือไม่ ให้ตรวจสอบพร็อพเพอร์ตี้ authenticatorAttachment ของข้อมูลเข้าสู่ระบบ หากค่าเป็น "cross-platform" แสดงว่าเป็นการตรวจสอบสิทธิ์ข้ามอุปกรณ์
หากเป็นเช่นนั้น ให้อธิบายความสะดวกในการสร้างพาสคีย์ใหม่และ
แนะนําขั้นตอนการสร้าง
ซิงค์รายละเอียดพาสคีย์กับผู้ให้บริการโดยใช้สัญญาณ
เพื่อรักษาความสอดคล้องและมอบประสบการณ์การใช้งานที่ดียิ่งขึ้นแก่ผู้ใช้ Relying Party (RP) สามารถใช้ WebAuthn Signals API เพื่อสื่อสารการอัปเดตเกี่ยวกับข้อมูลเข้าสู่ระบบและข้อมูลผู้ใช้กับผู้ให้บริการพาสคีย์
ตัวอย่างเช่น หากต้องการให้รายการพาสคีย์ของผู้ให้บริการพาสคีย์ของผู้ใช้มีความถูกต้อง ให้เก็บข้อมูลเข้าสู่ระบบไว้ในแบ็กเอนด์ให้ซิงค์กัน คุณส่งสัญญาณว่าไม่มีพาสคีย์อีกต่อไป เพื่อให้ผู้ให้บริการพาสคีย์นำพาสคีย์ที่ไม่จำเป็นออกได้
ในทำนองเดียวกัน คุณสามารถส่งสัญญาณได้หากผู้ใช้อัปเดตชื่อผู้ใช้หรือชื่อที่แสดงในบริการของคุณ เพื่อช่วยให้ข้อมูลผู้ใช้ที่ผู้ให้บริการพาสคีย์แสดง (เช่น ในกล่องโต้ตอบการเลือกบัญชี) เป็นข้อมูลล่าสุด
ดูข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติที่ดีในการรักษาพาสคีย์ให้สอดคล้องกันได้ที่รักษาพาสคีย์ให้สอดคล้องกับข้อมูลเข้าสู่ระบบในเซิร์ฟเวอร์ด้วย Signal API
ไม่ต้องขอปัจจัยที่ 2
พาสคีย์ให้การป้องกันในตัวที่แข็งแกร่งจากภัยคุกคามที่พบบ่อย เช่น ฟิชชิง ดังนั้นปัจจัยการตรวจสอบสิทธิ์ที่ 2 จึงไม่ได้เพิ่มมูลค่าด้านความปลอดภัยอย่างมีนัยสำคัญ แต่กลับสร้างขั้นตอนที่ไม่จำเป็นสำหรับผู้ใช้ในระหว่างการลงชื่อเข้าใช้
เช็กลิสต์
- อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์ผ่านการป้อนข้อความอัตโนมัติในแบบฟอร์ม
- ส่งสัญญาณเมื่อไม่พบข้อมูลเข้าสู่ระบบที่ตรงกับพาสคีย์ในแบ็กเอนด์
- แจ้งให้ผู้ใช้สร้างพาสคีย์ด้วยตนเองหากผู้ใช้ยังไม่ได้สร้างหลังจากลงชื่อเข้าใช้
- สร้างพาสคีย์โดยอัตโนมัติ (สร้างแบบมีเงื่อนไข) หลังจากที่ผู้ใช้ลงชื่อเข้าใช้ ด้วยรหัสผ่าน (และปัจจัยที่ 2)
- แจ้งให้สร้างพาสคีย์ในเครื่องหากผู้ใช้ลงชื่อเข้าใช้ด้วยพาสคีย์แบบข้ามอุปกรณ์
- ส่งสัญญาณรายการพาสคีย์ที่ใช้ได้และรายละเอียดผู้ใช้ที่อัปเดตแล้ว (ชื่อผู้ใช้ ชื่อที่แสดง) ไปยังผู้ให้บริการหลังจากลงชื่อเข้าใช้หรือเมื่อมีการเปลี่ยนแปลง