เอกสารนี้อธิบายความหมายของ userVerification
ใน WebAuthn และลักษณะการทำงานของเบราว์เซอร์ที่ส่งผลให้เมื่อมีการระบุ userVerification
ระหว่างการสร้างหรือการตรวจสอบสิทธิ์พาสคีย์
"การยืนยันผู้ใช้" ใน WebAuthn คืออะไร
พาสคีย์สร้างขึ้นบนวิทยาการเข้ารหัสคีย์สาธารณะ เมื่อสร้างพาสคีย์ ระบบจะสร้างคู่คีย์สาธารณะ-ส่วนตัวขึ้น ผู้ให้บริการพาสคีย์จะจัดเก็บคีย์ส่วนตัว และคีย์สาธารณะจะส่งกลับไปยังเซิร์ฟเวอร์ (RP) ของฝ่ายที่เกี่ยวข้องเพื่อจัดเก็บ เซิร์ฟเวอร์จะตรวจสอบสิทธิ์ผู้ใช้ได้โดยยืนยันลายเซ็นที่รับรองด้วยพาสคีย์เดียวกันโดยใช้คีย์สาธารณะที่จับคู่ไว้ แฟล็ก "ผู้ใช้อยู่" (UP) ในข้อมูลเข้าสู่ระบบคีย์สาธารณะจะพิสูจน์ว่ามีคนโต้ตอบกับอุปกรณ์ในระหว่างการตรวจสอบสิทธิ์
การยืนยันผู้ใช้เป็นระบบการรักษาความปลอดภัยที่เลือกได้ซึ่งจะช่วยยืนยันว่าบุคคลที่ถูกต้องปรากฏอยู่ในการตรวจสอบสิทธิ์ ไม่ใช่บุคคลบางคน ตามที่สถานะผู้ใช้ยืนยัน บนสมาร์ทโฟน มักจะทำได้โดยใช้กลไกการล็อกหน้าจอ ไม่ว่าจะเป็นข้อมูลไบโอเมตริกหรือ PIN หรือรหัสผ่าน มีการรายงานการยืนยันผู้ใช้หรือไม่ในแฟล็ก "UV" ที่ส่งกลับมาในข้อมูล Authenticator ระหว่างการลงทะเบียนและการตรวจสอบสิทธิ์พาสคีย์
วิธีตรวจสอบ UP และ UV บนเซิร์ฟเวอร์
ระบบจะส่งสัญญาณสถานะผู้ใช้ (UP) และธงบูลีนที่ยืนยันโดยผู้ใช้ (UV) ไปยังเซิร์ฟเวอร์ในช่องข้อมูล Authenticator ในระหว่างการตรวจสอบสิทธิ์ คุณสามารถตรวจสอบเนื้อหาในช่องข้อมูล Authenticator ได้ด้วยการยืนยันลายเซ็นโดยใช้คีย์สาธารณะที่จัดเก็บไว้ ตราบใดที่ลายเซ็นถูกต้อง เซิร์ฟเวอร์จะพิจารณาว่าการแจ้งว่าไม่เหมาะสมนั้นเป็นของแท้หรือไม่
ในการลงทะเบียนและการตรวจสอบสิทธิ์พาสคีย์ เซิร์ฟเวอร์ควรตรวจสอบว่าแฟล็ก UP เป็น true
และ UV Flag เป็น true
หรือ false
ขึ้นอยู่กับข้อกำหนด
การระบุพารามิเตอร์ userVerification
ตามข้อกําหนดของ WebAuthn RP จะขอการยืนยันผู้ใช้ด้วยพารามิเตอร์ userVerification
ได้ทั้งในการสร้างข้อมูลเข้าสู่ระบบและการยืนยัน และยอมรับ 'preferred'
, 'required'
หรือ 'discouraged'
ตามลําดับซึ่งมีความหมายดังนี้
'preferred'
(ค่าเริ่มต้น): การใช้วิธีการยืนยันผู้ใช้ในอุปกรณ์เป็นการใช้ แต่สามารถข้ามได้หากใช้ไม่ได้ ข้อมูลเข้าสู่ระบบที่เป็นการตอบกลับจะมีค่าแฟล็ก UV ที่true
หากได้ดำเนินการยืนยันผู้ใช้ และfalse
ในกรณีที่ไม่มี UV'required'
: คุณต้องเรียกใช้วิธีการยืนยันผู้ใช้ที่ใช้ได้ในอุปกรณ์ หากไม่มี คำขอจะดำเนินการไม่สำเร็จภายในเครื่อง ซึ่งหมายความว่าข้อมูลเข้าสู่ระบบการตอบสนองจะแสดงพร้อมตั้งค่า UV Flag เป็นtrue
เสมอ'discouraged'
: เราไม่แนะนำให้ใช้วิธีการยืนยันผู้ใช้ อย่างไรก็ตาม อาจมีการดำเนินการยืนยันผู้ใช้ ทั้งนี้ขึ้นอยู่กับอุปกรณ์ และแฟล็ก UV อาจมีtrue
หรือfalse
โค้ดตัวอย่างสำหรับการสร้างพาสคีย์
const publicKeyCredentialCreationOptions = {
// ...
authenticatorSelection: {
authenticatorAttachment: 'platform',
residentKey: 'required',
requireResidentKey: true,
userVerification: 'preferred'
}
};
const credential = await navigator.credentials.create({
publicKey: publicKeyCredentialCreationOptions
});
ตัวอย่างโค้ดสำหรับการตรวจสอบสิทธิ์ด้วยพาสคีย์
const publicKeyCredentialRequestOptions = {
challenge: /* Omitted challenge data... */,
rpId: 'example.com',
userVerification: 'preferred'
};
const credential = await navigator.credentials.get({
publicKey: publicKeyCredentialRequestOptions
});
คุณควรเลือกตัวเลือกใดสำหรับ userVerification
ค่า userVerification
ที่คุณควรใช้ขึ้นอยู่กับข้อกำหนดของแอปพลิเคชัน รวมถึงความต้องการประสบการณ์ของผู้ใช้ด้วย
กรณีที่ควรใช้ userVerification='preferred'
ใช้ userVerification='preferred'
หากคุณให้ความสำคัญกับประสบการณ์ของผู้ใช้มากกว่าการป้องกัน
การยืนยันผู้ใช้อาจราบรื่นกว่าการปกป้องในหลายกรณี ตัวอย่างเช่น ใน macOS ที่ Touch ID ไม่พร้อมใช้งาน (เนื่องจากอุปกรณ์ไม่รองรับ ปิดใช้อยู่ หรืออุปกรณ์อยู่ในโหมดฝาพับ) ระบบจะขอให้ผู้ใช้ป้อนรหัสผ่านระบบแทน ซึ่งจะทำให้เกิดการใช้งานที่ติดขัด และผู้ใช้อาจออกจากการตรวจสอบสิทธิ์โดยสิ้นเชิง หากการขจัดอุปสรรคสำคัญกว่าสำหรับคุณ ให้ใช้ userVerification='preferred'
เมื่อใช้ userVerification='preferred'
แฟล็ก UV จะเป็น true
หากยืนยันผู้ใช้สำเร็จ และ false
ในกรณีที่ข้ามการยืนยันผู้ใช้ ตัวอย่างเช่น ใน macOS ที่ Touch ID ไม่พร้อมใช้งาน ระบบจะขอให้ผู้ใช้คลิกปุ่มเพื่อข้ามการยืนยันผู้ใช้ และข้อมูลเข้าสู่ระบบของคีย์สาธารณะจะมี UV Flag false
จากนั้น ธงยูวีจะเป็นสัญญาณในการวิเคราะห์ความเสี่ยง หากการพยายามลงชื่อเข้าใช้ดูจะมีความเสี่ยงเนื่องจากปัจจัยอื่นๆ คุณอาจต้องแจ้งคำถามอื่นในการลงชื่อเข้าใช้ให้กับผู้ใช้แทนในกรณีที่ไม่มีการยืนยันผู้ใช้
กรณีที่ควรใช้ userVerification='required'
ใช้ userVerification='required'
หากคิดว่าทั้ง UP และ UV จำเป็นจริงๆ
ข้อเสียของตัวเลือกนี้คือผู้ใช้อาจพบอุปสรรคมากขึ้นเมื่อลงชื่อเข้าใช้ ตัวอย่างเช่น ใน macOS ที่ Touch ID ไม่พร้อมใช้งาน ระบบจะขอให้ผู้ใช้ป้อนรหัสผ่านระบบ
userVerification='required'
จะช่วยให้มั่นใจว่ามีการยืนยันผู้ใช้ในอุปกรณ์แล้ว ตรวจสอบว่าเซิร์ฟเวอร์ยืนยันว่าค่าสถานะ UV เป็น true
บทสรุป
เมื่อใช้การยืนยันผู้ใช้ ผู้ที่ต้องใช้พาสคีย์สามารถวัดความเป็นไปได้ที่เจ้าของอุปกรณ์จะลงชื่อเข้าใช้ ซึ่งผู้ใช้จะเลือกได้ว่าต้องการกำหนดให้มีการยืนยันจากผู้ใช้หรือจะกำหนดให้เป็นแบบไม่บังคับ ขึ้นอยู่กับว่ากลไกการลงชื่อเข้าใช้สำรองส่งผลต่อการไหลเวียนของผู้ใช้มากน้อยเพียงใด ตรวจสอบว่าเซิร์ฟเวอร์ตรวจสอบแฟล็ก UP และ UV สำหรับการตรวจสอบสิทธิ์ผู้ใช้พาสคีย์