Update FedCM: Domain Hint API

Dari Chrome 123, Anda dapat menggunakan Domain Hints 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.

Domain Hint API

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 terutama 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. Hal ini mencegah skenario saat pengguna mencoba login ke RP menggunakan akun di luar domain perusahaan, hanya untuk ditampilkan pesan error nanti (atau diam jika 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 dapat menjadi vektor sidik jari ke IdP. Sebagai gantinya, Chrome akan menjalankan permintaan FedCM seperti biasa, dan memfilter akun yang tidak cocok dengan nilai domainHint yang ditentukan oleh panggilan navigator.credentials.get(). Kemudian, Chrome 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 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. Tautan tersebut kemudian ditambahkan dengan petunjuk login dan parameter kueri petunjuk domain.

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