Update FedCM: Domain Hint API

Mulai Chrome 123, Anda dapat menggunakan Domain Hints bersama Federated Credential Management API (FedCM). Dengan Domain Hint API, developer dapat memberikan pengalaman pengguna yang lebih baik dengan hanya menampilkan akun login gabungan dari domain yang mereka terima.

API Petunjuk Domain

FedCM dapat digunakan untuk mempermudah pengguna login ke pihak tepercaya (RP, yang merujuk ke situs) menggunakan informasi akun yang disediakan oleh penyedia identitas (IdP). Namun, ada kasus saat RP sudah mengetahui bahwa hanya akun yang terkait dengan domain tertentu yang diizinkan untuk login ke situs. Hal ini sangat umum dalam skenario perusahaan saat situs yang diakses dibatasi untuk domain perusahaan. Untuk memberikan pengalaman pengguna yang lebih baik, FedCM API memungkinkan RP hanya menampilkan akun yang dapat digunakan untuk login ke RP. Tindakan ini mencegah skenario saat pengguna mencoba login ke RP menggunakan akun di luar domain perusahaan, hanya untuk menerima pesan error di lain waktu (atau membisukan saat login tidak berfungsi) karena jenis akun yang tepat tidak digunakan.

Dengan Domain Hint API, RP dapat menentukan properti domainHint pada panggilan FedCM API untuk hanya menampilkan akun yang cocok bagi pengguna. IdP dapat memberikan properti domain_hints sebagai bagian dari respons dari endpoint daftar akun untuk menunjukkan domain yang terkait dengan akun. Dengan cara ini, browser dapat menampilkan akun yang cocok tanpa mengungkapkan petunjuk domain yang diminta kepada IdP.

Contoh respons JSON dari endpoint daftar akun akan terlihat seperti berikut:

{
 "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 dapat memanggil navigator.credentials.get() dengan properti domainHint untuk memfilter akun. Misalnya, pengguna mengunjungi corp-partner.example dan login dengan akun dari corp.example. Situs akan memanggil API sebagai berikut:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

Nilai domainHint tidak dikirim ke endpoint daftar akun untuk pemfilteran sisi server, karena nilai tersebut dapat menjadi vektor pelacakan sidik jari ke IdP. Sebagai gantinya, Chrome akan melakukan permintaan FedCM seperti biasa, dan memfilter akun yang tidak cocok dengan nilai domainHint yang ditentukan oleh panggilan navigator.credentials.get(). Kemudian, Chrome akan menampilkan dialog FedCM kepada pengguna dengan daftar akun baru. Pendekatan ini mirip dengan Login Hint API, tetapi kedua API ini menjawab pertanyaan yang berbeda. Login Hint API bertujuan untuk menjawab "manakah ID untuk pengguna yang saya inginkan?", sedangkan Domain Hint bertujuan untuk menjawab "perusahaan atau server manakah yang harus dimiliki akun ini?".

Saat domainHint: "any" digunakan, Chrome akan memfilter akun yang tidak memiliki domain (yaitu, domain_hints tidak diteruskan atau kosong). Misalnya, hal ini memungkinkan kasus penggunaan saat RP hanya mengizinkan akun terkelola dalam proses pendaftarannya.

Jika tidak ada akun yang cocok dengan domainHint, dialog FedCM akan menampilkan perintah login, yang memungkinkan pengguna login ke akun IdP yang cocok dengan petunjuk yang diminta oleh RP. Saat pengguna mengetuk perintah tersebut, jendela pop-up akan terbuka dengan URL login yang ditentukan dalam file konfigurasi. Link tersebut kemudian ditambahkan dengan parameter kueri petunjuk login dan petunjuk domain.

Contoh perintah login saat tidak ada akun yang cocok dengan domainHint.
Contoh perintah login saat tidak ada akun yang cocok dengan domainHint.