รักษาข้อมูลเข้าสู่ระบบให้สอดคล้องกับผู้ให้บริการข้อมูลเข้าสู่ระบบ

เมื่อผู้ใช้สร้างพาสคีย์ เซิร์ฟเวอร์ของ Relying Party จะบันทึกรายละเอียดบางอย่าง ขณะที่ผู้ให้บริการข้อมูลเข้าสู่ระบบ เช่น เครื่องมือจัดการรหัสผ่านบน Google จะบันทึกรายละเอียดอื่นๆ ดังนี้

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

ความไม่สอดคล้องกันที่อาจเกิดขึ้นระหว่างข้อมูลที่บันทึกไว้ในเซิร์ฟเวอร์ของ Relying Party กับผู้ให้บริการข้อมูลเข้าสู่ระบบอาจทำให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี ปัญหาอาจเกิดขึ้นในสถานการณ์ต่อไปนี้

  • ข้อมูลเข้าสู่ระบบถูกลบในเซิร์ฟเวอร์ของ Relying Party แต่ไม่ได้ลบในผู้ให้บริการข้อมูลเข้าสู่ระบบ ซึ่งส่งผลให้ผู้ให้บริการข้อมูลเข้าสู่ระบบแสดงข้อมูลเข้าสู่ระบบที่ถูกลบต่อผู้ใช้
  • ชื่อผู้ใช้หรือชื่อที่แสดงได้รับการอัปเดตในเซิร์ฟเวอร์ของ Relying Party แต่ไม่ได้อัปเดตในผู้ให้บริการข้อมูลเข้าสู่ระบบ ซึ่งส่งผลให้ผู้ให้บริการข้อมูลเข้าสู่ระบบแสดงรายละเอียดที่ล้าสมัย

Signal API ของ Credential Manager ช่วยให้ Relying Party สื่อสารกับผู้ให้บริการข้อมูลเข้าสู่ระบบเพื่อลบข้อมูลเข้าสู่ระบบและอัปเดตข้อมูลเมตาของผู้ใช้ เช่น ชื่อผู้ใช้และชื่อที่แสดง คำขอที่รองรับมี 3 ประเภทสำหรับสถานการณ์ต่างๆ ดังนี้

  • SignalUnknownCredentialRequest

    • ระบุว่าข้อมูลเข้าสู่ระบบที่เฉพาะเจาะจงไม่ถูกต้องอีกต่อไปและควรซ่อนหรือนำออกจากผู้ให้บริการข้อมูลเข้าสู่ระบบ
  • SignalAllAcceptedCredentialIdsRequest

    • ระบุรายการรหัสข้อมูลเข้าสู่ระบบที่ยอมรับแก่ผู้ให้บริการข้อมูลเข้าสู่ระบบ
  • SignalCurrentUserDetailsRequest

    • อัปเดตรายละเอียดข้อมูลเมตาของผู้ใช้

ความเข้ากันได้ของเวอร์ชัน

Signal API พร้อมใช้งานในอุปกรณ์ที่ใช้ Android 15 ขึ้นไป และพร้อมใช้งานตั้งแต่ไลบรารี androidx.credentials เวอร์ชัน 1.6.0-beta03 เป็นต้นไป

การใช้งาน

หากต้องการใช้ Signal API ให้ทำตามขั้นตอนต่อไปนี้

  1. เพิ่มทรัพยากร Dependency ของ Credential Manager ลงในโปรเจ็กต์

    Kotlin

    dependencies {
        implementation("androidx.credentials:credentials:1.7.0-alpha01")
    }

    Groovy

    dependencies {
        implementation "androidx.credentials:credentials:1.7.0-alpha01"
    }

  2. เรียกใช้ Signal API

    หากต้องการส่งคำขอสัญญาณไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ ให้ใช้คำขอสัญญาณที่รองรับ คำขอสัญญาณแต่ละประเภทต้องใช้คำขอ JSON ดังที่แสดงในตัวอย่างต่อไปนี้

    • ข้อมูลเข้าสู่ระบบที่ไม่รู้จัก (SignalUnknownCredentialRequest)

      ใช้ SignalUnknownCredentialRequest เพื่อส่งสัญญาณว่าระบบปฏิเสธข้อมูลเข้าสู่ระบบและถือว่าไม่รู้จัก เมื่อผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับสัญญาณนี้ ระบบจะซ่อนหรือลบข้อมูลเข้าสู่ระบบ

      การใช้งาน

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

      พารามิเตอร์ JSON ที่จำเป็นสำหรับคำขอนี้คือ rpId และ credentialId ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้าง JSON ได้ที่ ตัวเลือก signalUnknownCredential

      credentialManager.signalCredentialState(
          SignalUnknownCredentialRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */)
              }.toString()
          )
      )
      
    • ข้อมูลเข้าสู่ระบบที่ยอมรับทั้งหมด (SignalAllAcceptedCredentialIdsRequest)

      ใช้ SignalAllAcceptedCredentialIdsRequest เพื่อแจ้งให้ผู้ให้บริการข้อมูลเข้าสู่ระบบทราบชุดข้อมูลเข้าสู่ระบบที่ยอมรับทั้งหมด เมื่อผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับสัญญาณแล้ว ผู้ให้บริการข้อมูลเข้าสู่ระบบจะซ่อนหรือลบข้อมูลเข้าสู่ระบบที่ไม่ได้รวมอยู่ในรายการนี้ หรือเลิกซ่อนข้อมูลเข้าสู่ระบบที่ซ่อนไว้ก่อนหน้านี้ซึ่งตอนนี้รวมอยู่ในรายการ

      การใช้งาน

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

      พารามิเตอร์ JSON ที่จำเป็นสำหรับคำขอนี้คือ rpId, userId และ allAcceptedCredentialIds ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้าง JSON ได้ที่ ตัวเลือก signalAllAcceptedCredential

      credentialManager.signalCredentialState(
          SignalAllAcceptedCredentialIdsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put(
                      "allAcceptedCredentialIds",
                      JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */)
                  )
              }.toString()
          )
      )
      
    • รายละเอียดผู้ใช้ปัจจุบัน (SignalCurrentUserDetailsRequest)

      ใช้ SignalCurrentUserDetailsRequest เพื่อแจ้งให้ผู้ให้บริการข้อมูลเข้าสู่ระบบทราบว่าข้อมูลเมตา เช่น ชื่อผู้ใช้และชื่อที่แสดงของผู้ใช้รายหนึ่งได้รับการอัปเดตแล้วและควรปรากฏในผู้ให้บริการข้อมูลเข้าสู่ระบบ

      การใช้งาน

      ใช้สัญญาณนี้เมื่อผู้ใช้หรือ Relying Party อัปเดตข้อมูลเมตาของพาสคีย์ที่เชื่อมโยงกับบัญชีผู้ใช้

      พารามิเตอร์ JSON ที่จำเป็นสำหรับคำขอนี้คือ rpId, userId, name และ displayName ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้าง JSON ได้ที่ตัวเลือก signalCurrentUserDetails

      credentialManager.signalCredentialState(
          SignalCurrentUserDetailsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put("name", name /* [String] New Name to be updated for the current user */)
                  put("displayName", displayName /* [String] New display name to be updated for the current user */)
              }.toString()
          )
      )
      

ทดสอบการใช้งาน

หากต้องการทดสอบการใช้งาน Signal API ให้ทำตามขั้นตอนต่อไปนี้

  1. ติดตั้งตัวอย่างผู้ให้บริการข้อมูลเข้าสู่ระบบที่ชื่อ MyVault

  2. เปิดใช้ MyVault เป็นผู้ให้บริการข้อมูลเข้าสู่ระบบในการตั้งค่า > รหัสผ่าน พาสคีย์ และบัญชี > บริการที่ต้องการ

    เมนูบริการที่ต้องการในการตั้งค่า Android ซึ่งแสดง MyVault ที่เปิดใช้เป็นผู้ให้บริการข้อมูลเข้าสู่ระบบ

  3. เปิดใช้การแจ้งเตือนทั้งหมดสำหรับ MyVault ในการตั้งค่า > แอป > MyVault > การแจ้งเตือน

    เมนูการแจ้งเตือนสำหรับแอป MyVault ซึ่งแสดงการแจ้งเตือนทั้งหมดที่เปิดใช้

  4. ตรวจสอบว่าแสดงป๊อปอัปบนหน้าจอ เปิดอยู่สำหรับการแจ้งเตือนในการตั้งค่า > แอป > MyVault > การแจ้งเตือน > หมวดหมู่ > ช่องการแจ้งเตือน Signal API

    การตั้งค่าแชแนลการแจ้งเตือนของ Signal API สำหรับ MyVault โดยแสดงตัวเลือก &quot;ป๊อปอัปบนหน้าจอ&quot; ที่เปิดใช้

  5. ในแอป ให้ทริกเกอร์โฟลว์ที่ส่งคำขอสัญญาณไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ คุณควรเห็นการแจ้งเตือนจาก MyVault บนหน้าจอ ซึ่งจะเป็นการยืนยันว่าผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับคำขอแล้ว