Mulai Chrome 122, Putuskan API untuk Federated Credential Management API (FedCM) tersedia. Dengan Putuskan API, pihak tepercaya dapat memutuskan koneksi penggunanya dari akun penyedia identitas tanpa mengandalkan cookie pihak ketiga. Selain itu, ada beberapa pembaruan pada penanganan situs yang sama oleh FedCM.
Putuskan API
Saat pengguna membuat akun di pihak tepercaya (RP—situs yang menggunakan penyedia identitas untuk autentikasi) melalui penggabungan identitas, penyedia identitas (IdP—layanan yang memberikan autentikasi dan informasi akun kepada pihak lain) biasanya akan mencatat koneksi tersebut pada servernya. Koneksi yang disimpan memungkinkan IdP melacak RP yang telah login pengguna dan mengoptimalkan pengalaman mereka. Misalnya, untuk mendapatkan pengalaman yang lebih baik saat pengguna kembali ke RP, akun pengguna dengan IdP diperlakukan sebagai akun kembali, yang memungkinkan fitur seperti autentikasi ulang otomatis dan tombol yang dipersonalisasi yang menampilkan akun yang digunakan.
Terkadang, IdP menawarkan API untuk memutuskan sambungan akun dari RP. Namun, alur pemutusan koneksi diautentikasi dan memerlukan cookie IdP. Jika tanpa cookie pihak ketiga, saat pengguna mengunjungi RP, tidak ada API browser untuk RP yang terputus dari IdP. Karena mungkin ada beberapa akun IdP dari IdP yang sama yang ditautkan ke RP tertentu, alur pemutusan koneksi memerlukan mengetahui akun mana yang terputus.
Dengan Memutuskan API, pengguna dapat memutuskan sambungan akun IdP dari RP di browser serta di server IdP dengan memberikan sinyal ke endpoint yang ditentukan. Pengguna harus melalui penggabungan identitas menggunakan Federated Credential Management API (FedCM). Setelah terputus, pengguna akan diperlakukan sebagai pengguna baru saat mencoba login lagi ke RP menggunakan IdP.
Memutuskan koneksi IdP dari RP
Jika sebelumnya pengguna telah login ke RP menggunakan IdP melalui FedCM, hubungan tersebut akan diingat oleh browser secara lokal sebagai daftar akun
yang terhubung. RP dapat memulai pemutusan koneksi dengan memanggil
fungsi IdentityCredential.disconnect()
. Fungsi ini dapat dipanggil dari
frame RP level atas. RP harus meneruskan configURL
, clientId
yang digunakannya
di bawah IdP, dan accountHint
untuk memutuskan sambungan IdP. Petunjuk
akun dapat berupa string arbitrer selama endpoint pemutusan koneksi dapat mengidentifikasi
akun, misalnya alamat email atau ID pengguna yang tidak selalu
cocok dengan ID akun yang diberikan 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
. Promise ini dapat menampilkan 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 koneksi IdP menampilkan respons, RP dan IdP akan terputus sambungannya di browser dan promise akan diselesaikan. Akun pengguna yang memutuskan koneksi ditentukan dalam respons dari endpoint pemutusan koneksi.
Menyiapkan file konfigurasi IdP
Untuk mendukung Putuskan API, IdP harus mendukung endpoint pemutusan koneksi
dan memberikan properti disconnect_endpoint
serta jalurnya di file konfigurasi
IdP.
{
"accounts_endpoint": "/accounts",
"id_assertion_endpoint": "/assertion",
...
"disconnect_endpoint: "/disconnect"
}
Memutuskan koneksi akun pada endpoint pemutusan koneksi
Dengan memanggil IdentityCredential.disconnect()
, browser akan mengirimkan permintaan POST
lintas origin
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 tersebut, server IdP akan:
- Tanggapi permintaan dengan CORS (Cross-Origin Resource Sharing).
- Pastikan permintaan berisi header HTTP
Sec-Fetch-Dest: webidentity
. - Cocokkan header
Origin
dengan asal RP yang ditentukan berdasarkanclient_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 format JSON.
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 dapat menjadi subdomain
server IdP produksi. Misalnya, server IdP produksi
berada di idp.example
, serta server RP staging serta server IdP staging berada di staging.idp.example
. Namun, karena file populer harus ditempatkan
di root eTLD+1 server IdP, file tersebut harus berada di
idp.example/.well-known/web-identity
dan merupakan server produksi. Karena
developer tidak selalu memungkinkan untuk menempatkan file di lingkungan
produksi saat dalam pengembangan, hal ini mencegah mereka menguji FedCM.
Mulai Chrome 122, jika domain RP dan domain IdP sama, Chrome akan melewati pemeriksaan file yang dikenal. Dengan cara ini, developer akan dapat melakukan pengujian dalam skenario seperti itu.
Subresource kini dapat menetapkan status login situs yang sama
Sebelumnya, Chrome hanya mengizinkan penyetelan status login (misalnya, menggunakan header Set-Login: logged-in
) jika permintaan merupakan origin yang sama dengan semua ancestor. Hal ini mencegah login melalui permintaan fetch()
situs yang sama
yang menetapkan status login.
Misalnya, pikirkan tentang situs yang memungkinkan pengguna memasukkan nama pengguna dan
sandi di idp.example
, tetapi kredensialnya akan diposting ke login.idp.example
dengan fetch()
. Pencatatan status login ke browser menggunakan Login Status
API tidak dapat dilakukan karena keduanya merupakan lintas origin dan situs yang sama.
Dengan perubahan ini, kami telah melonggarkan persyaratan Login Status API menjadi situs yang sama dengan semua ancestor dan memungkinkan contoh di atas untuk menetapkan status login login.idp.example
menggunakan header HTTP (Set-Login:
logged-in
).
Ringkasan
Dengan menggunakan Memutuskan API, FedCM kini dapat memutuskan koneksi RP dari IdP
tanpa mengandalkan cookie pihak ketiga. Untuk melakukannya, panggil
IdentityCredential.disconnect()
di RP. Dengan fungsi ini, browser
akan mengirimkan permintaan ke endpoint pemutusan koneksi IdP sehingga IdP dapat menghentikan
koneksi di server, dan kemudian di browser.
Untuk tujuan pengujian, kami telah mengumumkan bahwa pemeriksaan /.well-known/web-identity
dilewati jika RP
dan IdP merupakan situs yang sama. Selain itu, setelan status login
melalui header respons HTTP dari subresource IdP situs yang sama kini
dapat dilakukan.