ใน Chrome 122 ให้ยกเลิกการเชื่อมต่อ API สำหรับข้อมูลเข้าสู่ระบบแบบรวมศูนย์ API การจัดการ (FedCM) พร้อมใช้งาน Connected API ช่วยให้บุคคลที่พึ่งพาสามารถยกเลิกการเชื่อมต่อผู้ใช้ของตนจาก บัญชีของผู้ให้บริการข้อมูลประจำตัวได้โดยไม่ต้องอาศัยคุกกี้ของบุคคลที่สาม นอกจากนี้ยังมี เป็นการอัปเดต 2 อย่างสำหรับเรื่องการจัดการเว็บไซต์เดียวกันของ FedCM
ยกเลิกการเชื่อมต่อ API
เมื่อผู้ใช้สร้างบัญชีจากฝ่ายที่เกี่ยวข้อง (RP ซึ่งก็คือเว็บไซต์ที่ใช้ ผู้ให้บริการข้อมูลประจำตัวสำหรับการตรวจสอบสิทธิ์) ผ่านการรวมศูนย์ข้อมูลประจำตัว รหัสข้อมูลประจําตัว ผู้ให้บริการ (IdP ซึ่งเป็นบริการที่มีการตรวจสอบสิทธิ์และข้อมูลบัญชี) แก่บุคคลอื่น) โดยทั่วไปจะบันทึกการเชื่อมต่อบนเซิร์ฟเวอร์ ไฟล์ที่เก็บไว้ การเชื่อมต่อช่วยให้ IdP สามารถติดตาม RP ที่ผู้ใช้ได้ลงชื่อเข้าใช้และ เพิ่มประสิทธิภาพประสบการณ์การใช้งาน ตัวอย่างเช่น เพื่อประสบการณ์ที่ดียิ่งขึ้นเมื่อ ผู้ใช้กลับไปยัง RP ในภายหลัง บัญชีผู้ใช้ที่มี IdP จะถือว่าเป็น บัญชีที่ส่งคืน ซึ่งอนุญาตให้ใช้ฟีเจอร์ต่างๆ เช่น การตรวจสอบสิทธิ์ซ้ำโดยอัตโนมัติและ ปุ่มที่ปรับเปลี่ยนในแบบของคุณซึ่งแสดงบัญชีที่ใช้
บางครั้ง IdP อาจเสนอ API เพื่อยกเลิกการเชื่อมต่อบัญชีกับ RP อย่างไรก็ตาม ขั้นตอนการยกเลิกการเชื่อมต่อจะได้รับการตรวจสอบสิทธิ์และต้องใช้คุกกี้ IdP ในโลกใบนี้ ไม่ใช้คุกกี้ของบุคคลที่สาม เมื่อผู้ใช้เข้าชม RP ก็จะไม่มีเบราว์เซอร์ API เพื่อให้ RP ยกเลิกการเชื่อมต่อกับ IdP เนื่องจากอาจมี IdP หลายราย บัญชีจาก IdP เดียวกันที่ลิงก์กับ RP ที่ระบุ ขั้นตอนการยกเลิกการเชื่อมต่อต้องใช้ โดยทราบว่าบัญชีใดถูกตัดการเชื่อมต่อ
การยกเลิกการเชื่อมต่อ API อนุญาตให้ผู้ใช้ยกเลิกการเชื่อมต่อบัญชี IdP กับ RP ในเบราว์เซอร์ด้วย ในเซิร์ฟเวอร์ IdP โดยส่งสัญญาณไปยังปลายทางที่ระบุ ความต้องการของผู้ใช้ ได้ผ่านการรวมศูนย์ข้อมูลประจำตัวโดยใช้ข้อมูลประจำตัวแบบรวมศูนย์ Management API (FedCM) เมื่อยกเลิกการเชื่อมต่อแล้ว ระบบจะถือว่าผู้ใช้เป็นผู้ใช้ ในครั้งถัดไปที่ผู้ใช้พยายามลงชื่อเข้าใช้ RP โดยใช้ IdP
ยกเลิกการเชื่อมต่อ IdP จาก RP
หากผู้ใช้เคยลงชื่อเข้าใช้ RP โดยใช้ IdP ผ่าน FedCM ไปแล้ว
ความสัมพันธ์จะจดจำโดยเบราว์เซอร์ในเครื่องเป็นรายการของการเชื่อมต่อ
บัญชี RP อาจเริ่มการตัดการเชื่อมต่อโดยเรียกใช้
IdentityCredential.disconnect()
ฟังก์ชันนี้สามารถเรียกจาก
เฟรม RP ระดับบนสุด RP ต้องผ่าน configURL
ซึ่งเป็น clientId
ที่ RP ใช้
ในส่วน IdP และ accountHint
เพื่อให้ยกเลิกการเชื่อมต่อ IdP บัญชี
คำแนะนำอาจเป็นสตริงที่กำหนดเองตราบใดที่ปลายทางที่ตัดการเชื่อมต่อสามารถระบุได้
เช่น อีเมลหรือรหัสผู้ใช้ ซึ่งไม่จำเป็นต้อง
ตรงกับรหัสบัญชีที่ปลายทางของรายการบัญชีระบุไว้ ดังนี้
// Disconnect an IdP account "account456" from the RP "https://idp.com/". This is invoked on the RP domain.
IdentityCredential.disconnect({
configURL: "https://idp.com/config.json",
clientId: "rp123",
accountHint: "account456"
});
IdentityCredential.disconnect()
แสดงผล Promise
คำสัญญานี้อาจทำให้
ข้อยกเว้นเนื่องจากเหตุผลต่อไปนี้
- ผู้ใช้ไม่ได้ลงชื่อเข้าใช้ RP โดยใช้ IdP ผ่าน FedCM
- มีการเรียก API จากภายใน iframe ที่ไม่มีนโยบายสิทธิ์ของ FedCM
- configURL ไม่ถูกต้องหรือไม่มีปลายทางการยกเลิกการเชื่อมต่อ
- การตรวจสอบนโยบายรักษาความปลอดภัยเนื้อหา (CSP) ไม่สำเร็จ
- มีคำขอยกเลิกการเชื่อมต่อที่รอดำเนินการ
- ผู้ใช้ปิดใช้งาน FedCM ในการตั้งค่าเบราว์เซอร์
เมื่อปลายทางการยกเลิกการเชื่อมต่อของ IdP แสดงผล การตอบสนอง RP และ IdP จะยกเลิกการเชื่อมต่อใน เบราว์เซอร์และสัญญาได้สำเร็จ บัญชีผู้ใช้ที่ถูกยกเลิกการเชื่อมต่อ ที่ระบุไว้ใน การตอบสนองจากการเลิกเชื่อมต่อ ปลายทาง
ตั้งค่าไฟล์การกำหนดค่า IdP
IdP ต้องรองรับการยกเลิกการเชื่อมต่อเพื่อรองรับการยกเลิกการเชื่อมต่อ API
ปลายทางและระบุพร็อพเพอร์ตี้ disconnect_endpoint
และเส้นทางใน IdP
ไฟล์การกำหนดค่า
{
"accounts_endpoint": "/accounts",
"id_assertion_endpoint": "/assertion",
...
"disconnect_endpoint: "/disconnect"
}
ยกเลิกการเชื่อมต่อบัญชีบนปลายทางการยกเลิกการเชื่อมต่อ
เมื่อเรียกใช้ IdentityCredential.disconnect()
เบราว์เซอร์จะส่งข้ามต้นทาง
คำขอ POST
ที่มีคุกกี้และประเภทเนื้อหา
application/x-www-form-urlencoded
ไปยังปลายทางที่ตัดการเชื่อมต่อนี้ด้วย
ข้อมูลต่อไปนี้
พร็อพเพอร์ตี้ | คำอธิบาย |
---|---|
account_hint |
คำแนะนำสำหรับบัญชี IdP |
client_id |
ตัวระบุลูกค้าของ RP |
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity
account_hint=account456&client_id=rp123
เมื่อได้รับคำขอ เซิร์ฟเวอร์ IdP ควรทำดังนี้
- ตอบกลับคำขอด้วย CORS (ทรัพยากรข้ามโดเมน) การแชร์)
- ยืนยันว่าคำขอมีส่วนหัว HTTP
Sec-Fetch-Dest: webidentity
- จับคู่ส่วนหัว
Origin
กับต้นทางของ RP ที่กำหนดโดยclient_id
ปฏิเสธหากข้อมูลไม่ตรงกัน - ค้นหาบัญชีที่ตรงกับ
account_hint
- ยกเลิกการเชื่อมต่อบัญชีผู้ใช้จากรายการบัญชีที่เชื่อมต่อของ RP
- ตอบสนองต่อเบราว์เซอร์ด้วย
account_id
ของผู้ใช้ที่ระบุใน JSON
ตัวอย่างเพย์โหลด JSON ของการตอบสนองมีลักษณะดังนี้
{
"account_id": "account456"
}
หาก IdP ต้องการให้เบราว์เซอร์ยกเลิกการเชื่อมต่อบัญชีทั้งหมดที่เชื่อมโยงกับ
RP แล้วส่งสตริงที่ไม่ตรงกับรหัสบัญชีใดๆ เช่น "*"
ระบบจะข้ามการตรวจสอบ /.well-known/web-identity
เมื่อ RP และ IdP อยู่ในเว็บไซต์เดียวกัน
เมื่อพัฒนาระบบ FedCM การทดสอบหรือทดลองใช้โดเมนเซิร์ฟเวอร์ RP อาจเป็น
โดเมนย่อยของเซิร์ฟเวอร์ IdP เวอร์ชันที่ใช้งานจริง เช่น เซิร์ฟเวอร์ IdP เวอร์ชันที่ใช้งานจริง
อยู่ที่ idp.example
และทั้งเซิร์ฟเวอร์ RP การทดลองใช้และเซิร์ฟเวอร์ IdP ชั่วคราว
อยู่ที่ staging.idp.example
อย่างไรก็ตาม เนื่องจากไฟล์ที่รู้จักกันดี
ที่รูทของ eTLD+1 ของเซิร์ฟเวอร์ IdP
idp.example/.well-known/web-identity
และเป็นเซิร์ฟเวอร์ที่ใช้งานจริง ตั้งแต่ปี
เป็นไปไม่ได้ที่นักพัฒนาซอฟต์แวร์จะวางไฟล์ในเวอร์ชันที่ใช้งานจริง
ขณะอยู่ในระหว่างการพัฒนา ทำให้ไม่สามารถทดสอบ FedCM ได้
เริ่มตั้งแต่ Chrome 122 เป็นต้นไป หากโดเมน RP และโดเมน IdP เหมือนกัน Chrome ข้ามการตรวจสอบไฟล์ที่รู้จัก วิธีนี้จะทำให้นักพัฒนาซอฟต์แวร์สามารถทดสอบ ในสถานการณ์เช่นนี้
ตอนนี้ทรัพยากรย่อยตั้งสถานะการเข้าสู่ระบบเว็บไซต์เดียวกันได้แล้ว
ก่อนหน้านี้ Chrome จะอนุญาตเฉพาะการตั้งค่าการเข้าสู่ระบบ
status (สำหรับ
โดยใช้ส่วนหัว Set-Login: logged-in
) เมื่อคำขอ
ต้นทางเดียวกัน
ที่มีระดับบนทั้งหมด การดำเนินการนี้ช่วยป้องกันการเข้าสู่ระบบผ่าน
เว็บไซต์เดียวกัน
fetch()
ขอให้ตั้งค่าสถานะการเข้าสู่ระบบ
ตัวอย่างเช่น ลองนึกถึงเว็บไซต์ที่ให้ผู้ใช้ป้อนชื่อผู้ใช้
รหัสผ่านใน idp.example
แต่ข้อมูลเข้าสู่ระบบโพสต์ไปที่ login.idp.example
ด้วย fetch()
การบันทึกสถานะการเข้าสู่ระบบไปยังเบราว์เซอร์โดยใช้สถานะการเข้าสู่ระบบ
API ใช้งานไม่ได้เนื่องจาก 2 โดเมนเป็นแบบข้ามต้นทางและเว็บไซต์เดียวกัน
การเปลี่ยนแปลงนี้เราได้ผ่อนปรนข้อกำหนดสำหรับ API สถานะการเข้าสู่ระบบ
เว็บไซต์เดียวกัน
ระดับบนทั้งหมด และทำให้ตัวอย่างข้างต้นสามารถตั้งค่า
สถานะการเข้าสู่ระบบของ login.idp.example
โดยใช้ส่วนหัว HTTP (Set-Login:
logged-in
)
สรุป
การใช้ Connected API ทำให้ FedCM สามารถยกเลิกการเชื่อมต่อ RP กับ IdP ได้แล้วในขณะนี้
โดยไม่ต้องอาศัยคุกกี้ของบุคคลที่สาม โดยโทร
IdentityCredential.disconnect()
ในเกม RP ด้วยฟังก์ชันนี้ เบราว์เซอร์
ส่งคำขอไปยังปลายทางที่ตัดการเชื่อมต่อของ IdP เพื่อให้ IdP สามารถสิ้นสุดการดำเนินการ
การเชื่อมต่อบนเซิร์ฟเวอร์ และบนเบราว์เซอร์
เราประกาศว่าระบบจะข้ามการตรวจสอบ /.well-known/web-identity
เมื่อ RP
และ IdP เป็นเว็บไซต์เดียวกันสำหรับวัตถุประสงค์ในการทดสอบ นอกจากนี้ การตั้งค่าการเข้าสู่ระบบ
สถานะผ่านส่วนหัวการตอบกลับ HTTP จากทรัพยากรย่อย IdP ของเว็บไซต์เดียวกันเปลี่ยนเป็นแล้ว
เท่าที่จะเป็นไปได้