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

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

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() สาย จากนั้น Chrome จะแสดงกล่องโต้ตอบ FedCM ไปยัง ผู้ใช้ด้วยรายการบัญชีใหม่ วิธีการนี้คล้ายกับ คำแนะนำการเข้าสู่ระบบ API แต่ทั้ง 2 อย่างนี้ API จะตอบคำถามที่แตกต่างกันไป API คำแนะนำการเข้าสู่ระบบมีเป้าหมายเพื่อตอบคำถาม "ซึ่งเป็น สำหรับผู้ใช้ที่ฉันต้องการได้อย่างไร" ในขณะที่คำแนะนำโดเมนจะตอบคำถามว่า บัญชีที่เป็นของบริษัทหรือเซิร์ฟเวอร์นี้ต้องเป็นของบัญชีนี้หรือไม่"

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

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

วันที่ ตัวอย่างพรอมต์การเข้าสู่ระบบเมื่อไม่มีบัญชีที่ตรงกับ domainHint
ตัวอย่างพรอมต์การเข้าสู่ระบบเมื่อไม่มีบัญชีที่ตรงกับ domainHint