การตรวจหาฟีเจอร์ WebAuthn ที่ง่ายขึ้นด้วย getClientCapabilities()

เผยแพร่: 15 มกราคม 2025

WebAuthn มีความสามารถเฉพาะตัว เช่น การโต้ตอบกับบลูทูธสำหรับโปรโตคอลแบบไฮบริด การสื่อสารกับผู้ให้บริการพาสคีย์ และการแนะนำพาสคีย์ในการป้อนข้อความอัตโนมัติ อย่างไรก็ตาม ไคลเอ็นต์และเครื่องมือตรวจสอบสิทธิ์ต่างๆ มีการรองรับฟีเจอร์ WebAuthn ในระดับที่แตกต่างกัน ความแตกต่างนี้อาจส่งผลให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่สอดคล้องกัน โดยผู้ใช้บางรายอาจพบข้อผิดพลาดหรือใช้ตัวเลือกการตรวจสอบสิทธิ์บางอย่างไม่ได้ การจัดหาวิธีให้นักพัฒนาแอปพิจารณาความสามารถของไคลเอ็นต์ช่วยให้นักพัฒนาแอปสร้างขั้นตอนการตรวจสอบสิทธิ์ที่แข็งแกร่งยิ่งขึ้นซึ่งปรับให้เข้ากับการเปลี่ยนแปลงเหล่านี้ได้

เมธอด PublicKeyCredential.getClientCapabilities() ช่วยให้ผู้ให้บริการสามารถ ระบุได้ว่าเบราว์เซอร์รองรับฟีเจอร์ WebAuthn ใดบ้าง เมธอด จะแสดงผล Promise ที่เปลี่ยนเป็นรายการความสามารถที่รองรับ ซึ่งช่วยให้ นักพัฒนาแอปปรับแต่งประสบการณ์การตรวจสอบสิทธิ์และเวิร์กโฟลว์ตามความสามารถเฉพาะของไคลเอ็นต์ได้

ความเข้ากันได้

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities() คือ WebAuthn API ที่อนุญาตให้ผู้ให้บริการระบุได้ว่ามีความสามารถใดบ้าง หากต้องการใช้ API คุณต้องเรียกใช้ PublicKeyCredential.getClientCapabilities() Promise ที่ส่งคืนจะเปลี่ยนเป็นออบเจ็กต์ที่มีความสามารถ โดยแต่ละความสามารถจะระบุความพร้อมใช้งานด้วย true หรือ false หากความสามารถเป็น undefined ให้พิจารณาว่าไม่ทราบความพร้อมใช้งาน

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

เบราว์เซอร์สามารถสร้างข้อมูลเข้าสู่ระบบได้โดยไม่ต้องใช้ UI แบบโมดอลที่โดดเด่น หากผู้ใช้ ยินยอมให้สร้างแล้ว

conditionalGet

เบราว์เซอร์สามารถตรวจสอบสิทธิ์ได้โดยการแสดงพาสคีย์เป็นส่วนหนึ่งของกล่องโต้ตอบการป้อนข้อความอัตโนมัติ แทนที่จะเป็น UI แบบโมดอลที่โดดเด่น ค่าเทียบเท่าที่มีอยู่คือ PublicKeyCredential.isConditionalMediationAvailable()

hybridTransport

อุปกรณ์ใช้บลูทูธได้เพื่อให้เบราว์เซอร์สร้างข้อมูลเข้าสู่ระบบและ ตรวจสอบสิทธิ์ด้วยข้อมูลดังกล่าวในอุปกรณ์ต่างๆ โดยใช้โปรโตคอลแบบไฮบริด โดยปกติแล้ว หมายความว่าเบราว์เซอร์สามารถแสดงคิวอาร์โค้ดเพื่อให้ผู้ใช้สแกนและลงชื่อเข้าใช้ ด้วยโทรศัพท์ที่มีข้อมูลเข้าสู่ระบบ

passkeyPlatformAuthenticator

เบราว์เซอร์สามารถสร้างข้อมูลเข้าสู่ระบบและตรวจสอบสิทธิ์ด้วยข้อมูลดังกล่าวผ่านเครื่องมือตรวจสอบสิทธิ์แพลตฟอร์มที่ใช้ยืนยันตัวตนผู้ใช้หรืออุปกรณ์อื่นที่รองรับผ่านโปรโตคอลแบบไฮบริด เทียบเท่ากับ hybridTransport || userVerifyingPlatformAuthenticator

relatedOrigins

เบราว์เซอร์สามารถสร้างข้อมูลเข้าสู่ระบบและตรวจสอบสิทธิ์ด้วยข้อมูลเข้าสู่ระบบที่ไม่ตรงกับ รหัส RP ได้ ตราบใดที่ระบุไว้ในไฟล์ต้นทางที่เกี่ยวข้อง

signalAllAcceptedCredentials

เบราว์เซอร์สามารถส่งสัญญาณข้อมูลเข้าสู่ระบบที่มีอยู่ในเซิร์ฟเวอร์ไปยังผู้ให้บริการ พาสคีย์ เพื่อให้ผู้ให้บริการพาสคีย์สามารถทำให้รายการพาสคีย์สอดคล้องกับเซิร์ฟเวอร์ อยู่เสมอ

signalCurrentUserDetails

เบราว์เซอร์สามารถส่งสัญญาณข้อมูลผู้ใช้ เช่น ชื่อผู้ใช้และชื่อที่แสดงในเซิร์ฟเวอร์ไปยังผู้ให้บริการพาสคีย์ เพื่อให้ผู้ให้บริการพาสคีย์สามารถเก็บข้อมูลพาสคีย์ให้สอดคล้องกับเซิร์ฟเวอร์

signalUnknownCredential

เบราว์เซอร์สามารถส่งสัญญาณข้อมูลเข้าสู่ระบบที่ลบแล้วในเซิร์ฟเวอร์ไปยังผู้ให้บริการพาสคีย์ เพื่อให้ผู้ให้บริการพาสคีย์สามารถทำให้รายการพาสคีย์สอดคล้องกับเซิร์ฟเวอร์ ได้

userVerifyingPlatformAuthenticator

เบราว์เซอร์สามารถสร้างและตรวจสอบสิทธิ์ด้วยข้อมูลเข้าสู่ระบบในเครื่องมือตรวจสอบสิทธิ์ของแพลตฟอร์ม ได้ ซึ่งไม่ได้หมายความว่าเบราว์เซอร์รองรับโปรโตคอลแบบไฮบริด ค่าเทียบเท่าที่มีอยู่คือ PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()

ส่วนขยาย

นอกจากนี้ RP ยังกำหนดส่วนขยายที่ใช้ได้ด้วย getClientCapabilities()

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

ตัวระบุจะขึ้นต้นด้วย extension: ตามด้วยชื่อส่วนขยาย ดูชื่อส่วนขยายได้ที่ตัวระบุส่วนขยาย WebAuthn ที่กำหนดไว้ที่ IANA

ดูข้อมูลเพิ่มเติม

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับพาสคีย์ ให้เริ่มต้นจากการเข้าสู่ระบบแบบไม่มีรหัสผ่านด้วยพาสคีย์