ข้อมูลอัปเดตจาก FedCM: Domain Hint API

ตั้งแต่ Chrome 123 เป็นต้นไป คุณจะใช้คำแนะนำโดเมนควบคู่ไปกับ Federated Credential Management API (FedCM) ได้ เมื่อใช้ Domain Hint API นักพัฒนาแอปจะมอบประสบการณ์การใช้งานที่ดีขึ้นให้แก่ผู้ใช้ได้ด้วยการแสดงเฉพาะบัญชีการเข้าสู่ระบบแบบรวมศูนย์จากโดเมนที่ยอมรับ

Domain Hint API

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

เมื่อใช้ Domain Hint API จะช่วยให้ RP ระบุพร็อพเพอร์ตี้ domainHint ในคอล FedCM API เพื่อแสดงเฉพาะบัญชีที่ตรงกันสำหรับผู้ใช้ IdP สามารถระบุพร็อพเพอร์ตี้ domain_hints เป็นส่วนหนึ่งของการตอบกลับจากปลายทางรายการบัญชีเพื่อบ่งชี้โดเมนที่เชื่อมโยงกับบัญชี วิธีนี้ช่วยให้เบราว์เซอร์แสดงบัญชีที่ตรงกันโดยไม่เปิดเผยคำแนะนำโดเมนที่ขอไปยัง IdP ได้

ตัวอย่างการตอบกลับ JSON จากปลายทางรายการบัญชีจะมีลักษณะดังนี้

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

RP สามารถเรียกใช้ navigator.credentials.get() ด้วยพร็อพเพอร์ตี้ domainHint เพื่อกรองบัญชี ตัวอย่างเช่น สมมติว่าผู้ใช้เข้าชม corp-partner.example และลงชื่อเข้าใช้ด้วยบัญชีจาก corp.example เว็บไซต์จะเรียกใช้ API ดังนี้

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

ระบบจะไม่ส่งค่า domainHint ไปยังปลายทางของรายการบัญชีเพื่อกรองฝั่งเซิร์ฟเวอร์ เนื่องจากอาจเป็นเวกเตอร์การระบุตัวตนไปยัง IdP แต่ Chrome จะดำเนินการตามคำขอ FedCM ตามปกติและกรองบัญชีที่ไม่ตรงกับค่า domainHint ที่ระบุโดยnavigator.credentials.get() call ออก จากนั้น Chrome จะแสดงกล่องโต้ตอบ FedCM แก่ผู้ใช้พร้อมรายการบัญชีใหม่ แนวทางนี้คล้ายกับ API คำแนะนำในการเข้าสู่ระบบ แต่ทั้ง 2 รายการนี้ตอบคำถามที่แตกต่างกัน Login Hint API มีไว้เพื่อตอบคำถามว่า "ตัวระบุใดสำหรับผู้ใช้ที่ฉันต้องการ" ส่วน Domain Hint มีไว้เพื่อตอบคำถามว่า "บัญชีนี้ต้องเป็นขององค์กรหรือเซิร์ฟเวอร์ใด"

เมื่อใช้ domainHint: "any" ทาง Chrome จะกรองบัญชีที่ไม่มีโดเมนใดๆ ออก (นั่นคือ ไม่ได้ส่ง domain_hints หรือ domain_hints ว่างเปล่า) ตัวอย่างเช่น กรณีการใช้งานนี้อนุญาตให้ RP อนุญาตเฉพาะบัญชีที่จัดการในขั้นตอนการลงชื่อสมัครใช้

เมื่อไม่มีบัญชีที่ตรงกับ domainHint กล่องโต้ตอบ FedCM จะแสดงข้อความแจ้งให้เข้าสู่ระบบ ซึ่งจะช่วยให้ผู้ใช้เข้าสู่ระบบบัญชี IdP ที่ตรงกับคำแนะนำที่ RP ขอได้ เมื่อผู้ใช้แตะข้อความแจ้ง หน้าต่างป๊อปอัปจะเปิดขึ้นพร้อม URL เข้าสู่ระบบที่ระบุไว้ในไฟล์คอนฟิ จากนั้นระบบจะเพิ่มคำแนะนำการเข้าสู่ระบบและพารามิเตอร์การค้นหาคำแนะนำโดเมนต่อท้ายลิงก์

ตัวอย่างข้อความแจ้งให้เข้าสู่ระบบเมื่อไม่มีบัญชีที่ตรงกับโดเมนฮินต์
ตัวอย่างข้อความแจ้งให้เข้าสู่ระบบเมื่อไม่มีบัญชีที่ตรงกับ domainHint