Update FedCM: Domain Hint API

Mulai Chrome 123, Anda dapat menggunakan Petunjuk Domain bersama dengan 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 memudahkan pengguna login ke pihak tepercaya (RP, merujuk ke situs) menggunakan informasi akun yang diberikan 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 terjadi 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. Hal ini mencegah skenario saat pengguna mencoba login ke RP menggunakan akun di luar domain perusahaan, tetapi akan menerima pesan error di kemudian hari (atau senyap 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 dengan domain mana akun yang terkait. Dengan cara ini, browser dapat menampilkan akun yang cocok tanpa mengungkapkan petunjuk domain yang diminta ke 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 hal tersebut dapat menjadi vektor pelacakan sidik jari ke IdP. Sebagai gantinya, Chrome 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 menjawab "yang merupakan ID untuk pengguna yang saya inginkan?", sedangkan Domain Hint bertujuan untuk menjawab "perusahaan atau server mana yang harus milik akun ini?".

Saat domainHint: "any" digunakan, Chrome akan memfilter akun yang tidak memiliki domain apa pun (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, jendela pop-up akan terbuka dengan URL login yang ditentukan dalam file konfigurasi. Link tersebut kemudian ditambahkan dengan petunjuk login dan parameter kueri petunjuk domain.

Contoh permintaan login saat tidak ada akun yang cocok dengan domainHint.
Contoh permintaan login jika tidak ada akun yang cocok dengan domainHint.