Update FedCM: Memutuskan API dan dua update

Dari Chrome 122, Putuskan API untuk Federated Credential Management API (FedCM) tersedia. Tujuan Putuskan API memungkinkan pihak tepercaya untuk memutuskan hubungan pengguna dari akun penyedia identitas Anda tanpa mengandalkan cookie pihak ketiga. Selain itu, ada adalah beberapa pembaruan untuk penanganan situs yang sama oleh FedCM.

Putuskan hubungan API

Saat pengguna membuat akun pada {i>relying party<i} (RP—situs yang menggunakan penyedia identitas untuk autentikasi) melalui penggabungan identitas, (IdP), yakni layanan yang menyediakan informasi autentikasi dan akun ke pihak lain) biasanya mencatat koneksi di servernya. Halaman yang disimpan memungkinkan IdP melacak RP tempat pengguna login dan mengoptimalkan pengalaman mereka. Misalnya, untuk mendapatkan pengalaman yang lebih baik saat Kemudian, pengguna kembali ke RP, akun pengguna dengan IdP diperlakukan sebagai mengembalikan akun, yang memungkinkan fitur seperti autentikasi ulang otomatis dan tombol yang dipersonalisasi yang menunjukkan akun yang digunakan.

Terkadang, IdP menawarkan API untuk memutuskan hubungan akun dari RP. Namun, alur pemutusan koneksi diautentikasi dan memerlukan cookie IdP. Di dunia tanpa cookie pihak ketiga, saat pengguna mengunjungi RP, tidak ada browser API untuk RP yang akan diputuskan hubungannya dari IdP. Karena mungkin ada beberapa IdP dari IdP yang sama yang ditautkan ke RP tertentu, alur pemutusan koneksi memerlukan mengetahui akun mana yang terputus.

Pemutusan API memungkinkan pengguna memutuskan sambungan akun IdP dari RP di browser juga seperti di server IdP dengan memberi sinyal ke endpoint yang ditentukan. Pengguna membutuhkan telah melalui penggabungan identitas menggunakan Kredensial Federated API Pengelolaan (FedCM). Setelah pengguna terputus, mereka diperlakukan sebagai saat berikutnya mereka mencoba login ke RP menggunakan IdP.

Memutuskan koneksi IdP dari RP

Jika sebelumnya pengguna telah login ke RP menggunakan IdP melalui FedCM, hubungan diingat oleh browser secara lokal sebagai daftar koneksi menggunakan akun layanan. RP dapat memulai pemutusan koneksi dengan memanggil metode Fungsi IdentityCredential.disconnect(). Fungsi ini dapat dipanggil dari {i>frame<i} RP tingkat atas. RP harus meneruskan configURL, clientId yang digunakannya di bagian IdP, dan accountHint untuk IdP yang akan diputuskan sambungannya. Akun petunjuk dapat berupa string arbitrer selama endpoint pemutusan koneksi dapat mengidentifikasi akun, misalnya alamat email atau ID pengguna yang tidak selalu cocokkan dengan ID akun yang diberikan oleh endpoint daftar akun:

// 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() menampilkan Promise. Janji ini dapat memunculkan pengecualian karena alasan berikut:

  • Pengguna belum login ke RP menggunakan IdP melalui FedCM.
  • API dipanggil dari dalam iframe tanpa kebijakan izin FedCM.
  • ConfigURL tidak valid atau tidak memiliki endpoint pemutusan koneksi.
  • Pemeriksaan Kebijakan Keamanan Konten (CSP) gagal.
  • Ada permintaan pemutusan hubungan yang tertunda.
  • Pengguna telah menonaktifkan FedCM di setelan browser.

Saat endpoint pemutusan IdP menampilkan , sambungan RP dan IdP terputus di {i>browser<i} Anda dan janji itu diselesaikan. Akun pengguna yang terputus adalah yang ditentukan dalam respons dari endpoint.

Menyiapkan file konfigurasi IdP

Untuk mendukung Putuskan Koneksi API, IdP harus mendukung pemutusan koneksi endpoint dan menyediakan properti disconnect_endpoint dan jalurnya di IdP-nya file konfigurasi.

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

Memutuskan koneksi akun di endpoint yang tidak terhubung

Dengan memanggil IdentityCredential.disconnect(), browser akan mengirim traffic asal POST dengan cookie dan jenis konten application/x-www-form-urlencoded ke endpoint pemutusan koneksi ini dengan informasi berikut:

Properti Deskripsi
account_hint Petunjuk untuk akun IdP.
client_id ID klien 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

Setelah menerima permintaan, server IdP:

  1. Respons permintaan dengan CORS (Cross-Origin Resource Berbagi).
  2. Pastikan permintaan berisi header HTTP Sec-Fetch-Dest: webidentity.
  3. Cocokkan header Origin dengan asal RP yang ditentukan oleh client_id. Tolak jika tidak cocok.
  4. Temukan akun yang cocok dengan account_hint.
  5. Putuskan hubungan akun pengguna dari daftar akun terhubung RP.
  6. Merespons browser dengan account_id pengguna yang diidentifikasi dalam JSON format font.

Contoh payload JSON respons terlihat seperti ini:

{
  "account_id": "account456"
}

Jika IdP ingin browser memutuskan sambungan semua akun yang terkait dengan RP, teruskan string yang tidak cocok dengan ID akun apa pun, misalnya "*".

Pemeriksaan /.well-known/web-identity kini dilewati jika RP dan IdP berada di situs yang sama

Saat mengembangkan sistem FedCM, domain server RP pengujian atau staging mungkin subdomain dari server IdP produksi. Misalnya, server IdP produksi berada di idp.example dan server RP staging serta server IdP staging berada di staging.idp.example. Namun, karena file yang dikenal luas harus ditempatkan di root eTLD+1 server IdP, itu harus berada di idp.example/.well-known/web-identity dan ini merupakan server produksi. Sejak developer belum tentu dapat menempatkan file dalam produksi saat dalam pengembangan, hal ini mencegah pengguna menguji FedCM.

Mulai Chrome 122, jika domain RP dan domain IdP sama, Chrome melewatkan pemeriksaan file yang dikenal luas. Dengan cara ini, pengembang akan dapat menguji di skenario seperti itu.

Subresource kini dapat menetapkan status login situs yang sama

Sebelumnya, Chrome hanya mengizinkan setelan login status (untuk misalnya, menggunakan header Set-Login: logged-in) saat permintaan adalah origin yang sama dengan semua ancestor. Tindakan ini dapat mencegah login melalui situs yang sama fetch() meminta setelan status login.

Misalnya, pikirkan tentang situs web yang memungkinkan pengguna memasukkan nama pengguna dan sandi di idp.example, tetapi kredensial diposting ke login.idp.example dengan fetch(). Mencatat status login ke browser menggunakan Status Login API tidak memungkinkan karena kedua domain tersebut adalah lintas origin dan situs yang sama.

Dengan perubahan ini, kami telah melonggarkan persyaratan untuk Login Status API menjadi yang situs yang sama dengan semua ancestor dan memungkinkan contoh di atas untuk Status login login.idp.example menggunakan header HTTP (Set-Login: logged-in).

Ringkasan

Dengan menggunakan Putuskan API, FedCM kini dapat memutuskan sambungan RP dari IdP tanpa mengandalkan cookie pihak ketiga. Untuk melakukannya, panggil IdentityCredential.disconnect() di RP. Dengan fungsi ini, browser mengirimkan permintaan ke endpoint pemutusan IdP sehingga IdP dapat menghentikan koneksi di server, dan kemudian di {i>browser<i}.

Kami telah mengumumkan bahwa pemeriksaan /.well-known/web-identity dilewati saat RP dan IdP adalah situs yang sama, untuk tujuan pengujian. Selain itu, menyetel info login melalui header respons HTTP dari subresource IdP situs yang sama kini sebaik mungkin.