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:
- Respons permintaan dengan CORS (Cross-Origin Resource Berbagi).
- Pastikan permintaan berisi header HTTP
Sec-Fetch-Dest: webidentity
. - Cocokkan header
Origin
dengan asal RP yang ditentukan olehclient_id
. Tolak jika tidak cocok. - Temukan akun yang cocok dengan
account_hint
. - Putuskan hubungan akun pengguna dari daftar akun terhubung RP.
- 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.