Digital Credentials API: ข้อมูลประจำตัวที่ปลอดภัยและเป็นส่วนตัวบนเว็บ

เผยแพร่: 3 ตุลาคม 2025

เรายินดีที่จะแจ้งให้ทราบว่าตอนนี้ Chrome 141 ได้เปิดใช้ Digital Credentials API โดยค่าเริ่มต้นแล้ว นอกจากนี้ iOS 26 ยังรองรับ Digital Credentials API ใน Chrome และเบราว์เซอร์อื่นๆ ด้วย API นี้จะช่วยเพิ่มระดับความปลอดภัยและความเป็นส่วนตัวใหม่ให้กับการยืนยันตัวตนบนเว็บ ซึ่งช่วยให้เว็บไซต์มีวิธีมาตรฐานในการขอและรับข้อมูลที่ยืนยันได้ จากผู้ใช้

หลังจากช่วงทดลองใช้ Origin ที่ประสบความสำเร็จ ตอนนี้ Digital Credentials API รองรับทั้งการแสดงข้อมูลเข้าสู่ระบบในอุปกรณ์เครื่องเดียวกันบน Android และการแสดงข้อมูลเข้าสู่ระบบแบบข้ามอุปกรณ์ ใน Chrome บนเดสก์ท็อปแล้ว

ฉากหลัง

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

ขณะเดียวกัน กฎระเบียบอย่าง eIDAS 2.0 ก็กำหนดให้รัฐบาลต้องจัดหาวิธีการระบุตัวตนแบบดิจิทัลให้แก่ประชาชน กระเป๋าเงินดิจิทัล สำหรับข้อมูลประจำตัวเหล่านี้ต้องสามารถจัดเก็บข้อมูลเข้าสู่ระบบต่างๆ รวมถึงหลักฐานแสดงตัวตนและอายุ ผู้ให้บริการออนไลน์สามารถขอข้อมูลเข้าสู่ระบบเหล่านี้เพื่อยืนยันตัวตนของผู้ใช้ได้

ชุมชนมาตรฐานเว็บใน W3C ได้พัฒนาโซลูชันเพื่อตอบสนองทั้งความต้องการด้านความเป็นส่วนตัวของผู้ใช้และความต้องการของนักพัฒนาซอฟต์แวร์ในการยืนยันข้อมูลผู้ใช้ โดยตระหนักถึงศักยภาพของข้อมูลประจำตัวดิจิทัล API ข้อมูลประจำตัวดิจิทัล Digital Credentials API มีเป้าหมายที่จะแก้ปัญหานี้ด้วยการเปิดตัวอินเทอร์เฟซในตัวสำหรับ ยืนยันข้อมูลผู้ใช้ ซึ่งจะช่วยปรับปรุงความปลอดภัย ความเป็นส่วนตัว และประสบการณ์ของผู้ใช้เมื่อเทียบกับ ทางเลือกอื่นๆ API นี้ช่วยให้ผู้ใช้ไม่ต้องอัปโหลดเอกสารที่ละเอียดอ่อน เช่น สแกนบัตรประจำตัว ไปยังเว็บไซต์หลายแห่งอีกต่อไป แต่เว็บไซต์สามารถสร้างความน่าเชื่อถือกับผู้ใช้ได้โดยการขอเฉพาะข้อมูลที่เฉพาะเจาะจงและมีการลงนามแบบเข้ารหัสที่ต้องการจากผู้ออกที่เชื่อถือได้

ฟีเจอร์หลัก

Digital Credentials API สร้างขึ้นโดยอิงตามหลักการสำคัญ 3 ประการ ได้แก่ ความเป็นส่วนตัว การรองรับข้ามแพลตฟอร์ม และ การกำหนดมาตรฐาน

ความเป็นส่วนตัว

Digital Credentials API ช่วยเพิ่มความเป็นส่วนตัวและความปลอดภัยบนโลกออนไลน์ ซึ่งช่วยให้ผู้ใช้แสดงบัตรประจำตัวดิจิทัลจากกระเป๋าเงินบนอุปกรณ์เคลื่อนที่ต่อเว็บไซต์เพื่อยืนยันข้อเท็จจริงที่เฉพาะเจาะจงได้โดยไม่ต้องเปิดเผยข้อมูลที่ละเอียดอ่อนพื้นฐาน ตัวอย่างเช่น API สามารถยืนยันว่าผู้ใช้มีอายุมากกว่า 18 ปีโดยไม่ต้องเปิดเผยวันเกิดแบบเต็ม หลักการ "การเปิดเผยข้อมูลแบบเลือก" นี้ช่วยให้มั่นใจได้ว่าเว็บไซต์จะได้รับเฉพาะ ข้อมูลที่จำเป็นขั้นต่ำเท่านั้น

นอกจากนี้ Digital Credentials API ยังใช้ได้กับโปรโตคอล Zero Knowledge Proofs (ZKP) เช่น Longfellow ZK ของ Google ซึ่งช่วยให้มั่นใจในความเป็นส่วนตัวของผู้ใช้โดยการส่งคืนการพิสูจน์การเข้ารหัสลับ ว่าการยืนยันตัวตนหนึ่งๆ เป็นจริงโดยไม่ต้องเปิดเผยข้อมูลอื่นๆ

การรองรับข้ามแพลตฟอร์ม

Digital Credentials API มีเป้าหมายเพื่อรองรับแพลตฟอร์มต่างๆ เพื่อให้ผู้ใช้สามารถนำเสนอข้อมูลที่ยืนยันแล้วในอุปกรณ์ต่างๆ ได้อย่างสะดวก

ใน Android: มีอินเทอร์เฟซผู้ใช้ในตัวที่ช่วยให้ผู้ใช้เลือกข้อมูลเข้าสู่ระบบจากแอปกระเป๋าเงินที่ติดตั้งได้

บนเดสก์ท็อป: ผู้ใช้สามารถนำเสนอข้อมูลเข้าสู่ระบบจากกระเป๋าเงินบนอุปกรณ์เคลื่อนที่ไปยังเว็บไซต์ในเบราว์เซอร์บนเดสก์ท็อปได้ การสแกนคิวอาร์โค้ดจะช่วยให้ระบบสร้างการเชื่อมต่อที่ปลอดภัย มีการเข้ารหัสจากต้นทางถึงปลายทาง และป้องกันฟิชชิงระหว่างเดสก์ท็อปกับอุปกรณ์เคลื่อนที่ การเชื่อมต่อนี้ใช้โปรโตคอล CTAP เพื่อยืนยันความใกล้เคียงของผู้ใช้ผ่าน BLE เพื่อให้แน่ใจว่าผู้ใช้มีตัวตนจริงและควบคุม อุปกรณ์ทั้ง 2 เครื่องได้

การปรับให้เป็นมาตรฐาน

ความสามารถในการทำงานร่วมกันเป็นสิ่งสำคัญ ใน Chrome นั้น Digital Credentials API เป็นแพลตฟอร์มโปรโตคอลที่ไม่ขึ้นต่อกัน และใช้ได้กับโปรโตคอลการนำเสนอต่างๆ เช่น OpenID4VP และ Annex C ของ ISO 18013-7 นอกจากนี้ Apple ยังได้เปิดตัวการรองรับ Digital Credentials API จาก Safari 26.0 ด้วย

นอกจากนี้ Digital Credentials API ยังสร้างขึ้นจากการรองรับการจัดการข้อมูลเข้าสู่ระบบในตัวของ Android และระบบนิเวศของกระเป๋าเงินที่รองรับซึ่งกำลังเติบโต Google Wallet เป็นผู้ใช้กลุ่มแรกๆ โดยมี การรองรับจาก Samsung Wallet และ 1Password ที่กำลังจะมา

มีอะไรใหม่ตั้งแต่ช่วงทดลองใช้ Origin

สำหรับผู้ที่เข้าร่วมช่วงทดลองใช้จากต้นทางก่อนหน้านี้ คุณจะเห็นว่า Digital Credentials API ได้ย้ายจาก navigator.identity.get() ไปยัง navigator.credentials.get() เพื่อให้สอดคล้องกับความพยายามในการรวมข้อมูลประจำตัวในวงกว้างด้วย Credential Management API นอกจากนี้ เรายังเปลี่ยนชื่อพารามิเตอร์ providers เป็น requests และเปลี่ยนชื่อ request เป็น data ด้วย

การใช้งาน

การผสานรวม Digital Credentials API มี 2 ขั้นตอนหลักๆ ได้แก่ การตรวจหาฟีเจอร์และการขอ ข้อมูลเข้าสู่ระบบ นักพัฒนาแอปควรใช้ตรรกะที่กำหนดเองเพื่อพิจารณาว่าแอปพลิเคชันของตนใช้ข้อมูลเข้าสู่ระบบได้หรือไม่

การตรวจหาฟีเจอร์

ก่อนที่จะแสดงปุ่ม "ยืนยันด้วยข้อมูลประจำตัวดิจิทัล" ให้ตรวจสอบว่า Digital Credentials API พร้อมใช้งานในเบราว์เซอร์ของผู้ใช้หรือไม่

if (typeof DigitalCredential !== "undefined") {
  // Digital Credentials API is supported
} else {
  // Digital Credentials API is not supported
}

ขอข้อมูลเข้าสู่ระบบ

การขอข้อมูลเข้าสู่ระบบเกี่ยวข้องกับการเรียกไปยัง navigator.credentials.get() โดยมีพารามิเตอร์ digital ภายในประเภทข้อมูลเข้าสู่ระบบดิจิทัล ให้เพิ่มrequestsอาร์เรย์ที่มี DigitalCredentialGetRequest พร้อมพารามิเตอร์พื้นฐานต่อไปนี้

  • protocol: ระบุโปรโตคอลการแลกเปลี่ยนด้วยสตริง เช่น "openid4vp" หรือ "org-iso-mdoc" ตรวจหาว่าเบราว์เซอร์รองรับโปรโตคอลหรือไม่โดยทำดังนี้

    if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) {
        // Create a request with this protocol
      } else {
        // Protocol is not supported
    }
    
  • data: ออบเจ็กต์ ที่มีพารามิเตอร์ที่แอปกระเป๋าเงินดิจิทัลยอมรับสำหรับโปรโตคอลที่ระบุ สำหรับ "openid4vp", พารามิเตอร์จะกำหนดไว้ใน OpenID สำหรับการนำเสนอที่ตรวจสอบได้ (OID4VP) สำหรับข้อกำหนด W3C Digital Credentials API

    try {
      const digitalCredential = await navigator.credentials.get({
        digital: {
          requests: [{
            protocol: "openid4vp-v1-unsigned",
            data: {
              response_type: "vp_token",
          nonce: "[some-nonce]",
              client_metadata: {...},
          dcql_query: {...}
            }
        }]
        }
      });
    
      // Decrypt payload respons and verify credentials on the backend
      const response = await fetch("/verify", {
        method: "POST",
          body: JSON.stringify(digitalCredential.data),
          headers: {
              'Content-Type': 'application/json'
          }
      });
    } catch (e) {
      // Handle errors, such as the user canceling the request
      console.error(e);
    }
    

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

{
  protocol: 'openid4vp-v1-unsigned',
  data: {
    response_type: 'vp_token',
    nonce: '[some-nonce]',
    // Contains the Verifier metadata values, including supported credential formats and response encryption public key
    client_metadata: {
  // Supported credential formats. Refer to the documentation for specific values
        vp_formats_supported: {...},
   // Public key(s). Refer to the documentation for more detail.
        jwks: {...}
    },
    dcql_query: {
      // A wallet will try to find credentials it holds that match these definitions.
      credentials: [
        {
          // A locally unique identifier for this credential definition within the query.
          id: "cred_vc",
          format: "dc+sd-jwt",
          meta: {
            // 'vct_values' specifies the Verifiable Credential allowed type.
            // In this case, it's a European Digital Identity (EUDI) Personal Identification Data (PID) credential.
            vct_values: [
              "urn:eudi:pid:1"
            ]
          },
          // 'claims' is an array of specific data that's being requested.
          claims: [
            {
              // The path ["age_equal_or_over", "18"] corresponds to accessing `credential.age_equal_or_over['18']`.
              path: [
                "age_equal_or_over",
                "18"
              ]
            }
          ]
        }
      ]
    }
  }
}

ในตัวอย่างนี้ client_metadata ต้องระบุรายการรูปแบบที่รองรับ โปรดดูค่าที่ใช้ได้ใน ข้อกำหนด ค่าไม่บังคับjwks ที่ตั้งค่าไว้ใน client_metadata ต้องมีคีย์สาธารณะที่ใช้สำหรับการเข้ารหัสการตอบกลับ คุณยังดูตัวอย่างเพิ่มเติมได้ในโค้ดสาธิต

ตัวอย่างเพย์โหลดการตอบกลับที่เข้ารหัสของออบเจ็กต์ DigitalCredential มีดังนี้

{
    // This is an example for a response using an OpenID4VP protocol.
    // The format of the 'data' object will differ for other protocols.
    "protocol": "openid4vp-v1-unsigned",
    "data": {
        // To decrypt this JWE payload, use the private key.
   // The decrypted payload will be a JSON object containing the
       // Verifiable Presentation in the 'vp_token' claim.
        "response": "[jwe-token]"
    }
}

ในตัวอย่างนี้ ระบบจะขอข้อมูลเข้าสู่ระบบด้วยopenid4vp-v1-unsigned โปรโตคอล และการตอบกลับจะมี response ในพร็อพเพอร์ตี้ data

วิธีแยกวิเคราะห์การตอบกลับที่แน่นอนจะขึ้นอยู่กับโปรโตคอล โดยปกติแล้ว คุณจะต้องดำเนินการต่อไปนี้

  1. ถอดรหัสเพย์โหลดการตอบกลับ วิธีการถอดรหัสจะขึ้นอยู่กับโปรโตคอลที่ใช้ ดูวิธีถอดรหัสเพย์โหลดสำหรับ openid4vp (ใช้ JWE) และ org-iso-mdoc (ใช้การเข้ารหัสคีย์สาธารณะแบบผสม)
  2. ยืนยันลายเซ็นและผู้ออกใบรับรอง โปรดดูรายละเอียดเพิ่มเติมในเอกสารประกอบเกี่ยวกับการยอมรับข้อมูลประจำตัวดิจิทัลทางออนไลน์

หากต้องการดูตัวอย่างโค้ดสำหรับโปรโตคอลต่างๆ โปรดดูโค้ดสำหรับการสาธิต หรือเวอร์ชันที่โฮสต์แบบสด

ยืนยันความน่าเชื่อถือของผู้ออกใบรับรอง

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

เริ่มต้นใช้งาน

พร้อมเริ่มสร้างหรือยัง ข้อมูลที่คุณจำเป็นต้องทราบมีดังนี้

  • ความพร้อมใช้งาน: Chrome 141 ขึ้นไปจะเปิดใช้ Digital Credentials API โดยค่าเริ่มต้นในแพลตฟอร์มต่างๆ
  • ข้อกำหนดเบื้องต้น: ผู้ใช้ต้องมีอุปกรณ์ที่เข้ากันได้ เช่น Android ที่ใช้บริการ Google Play เวอร์ชัน 24.0 ขึ้นไป หรืออุปกรณ์ iOS ที่ใช้เวอร์ชัน 26 ขึ้นไป อุปกรณ์ต้อง มีแอปพลิเคชันกระเป๋าเงินดิจิทัลที่ติดตั้งไว้ซึ่งรองรับ Digital Credentials API เช่น Google Wallet หรือกระเป๋าเงินดิจิทัลเวอร์ชันเดโม
  • ลองใช้เดโม: วิธีที่ดีที่สุดในการทำความเข้าใจประสบการณ์ของผู้ใช้และทดสอบการติดตั้งใช้งานคือการลองใช้เดโมแบบสดที่ https://verifier.multipaz.org ด้วย Chrome 141 ขึ้นไป

แหล่งข้อมูล

ดูข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลต่อไปนี้

แชร์ความคิดเห็น

ตอนนี้เราได้เปิดตัว Digital Credentials API แล้ว และอยากทราบประสบการณ์การสร้าง ด้วย API นี้จากคุณ ยื่นปัญหา เพื่อแชร์ความคิดเห็นหรือรายงานข้อบกพร่อง