Update FedCM: Domain Hint API

Mulai Chrome 123, Anda dapat menggunakan Petunjuk Domain bersama Federated Credential Management API (FedCM). Dengan Domain Hint API, pengembang bisa memberikan pengalaman pengguna yang lebih baik hanya dengan yang menampilkan akun {i>login<i} gabungan dari domain yang mereka terima.

API Petunjuk Domain

FedCM dapat digunakan untuk memudahkan pengguna untuk {i>login<i} ke {i>relying party<i} (RP, merujuk ke situs) menggunakan informasi akun yang disediakan oleh suatu identitas (IdP). Namun, ada kasus di mana RP sudah tahu bahwa hanya akun yang terkait dengan domain tertentu diizinkan untuk masuk ke situs. Ini sangat umum terjadi dalam skenario perusahaan di mana situs yang diakses dibatasi untuk domain perusahaan. Untuk memberikan pengalaman pengguna yang lebih baik, FedCM API memungkinkan RP untuk hanya menampilkan akun yang dapat digunakan untuk login ke RP. Hal ini mencegah skenario di mana pengguna mencoba masuk ke RP menggunakan di luar domain perusahaan, hanya untuk menerima pesan {i>error<i} nanti (atau senyapkan di mana {i>login<i} tidak berfungsi) karena jenis akun tidak digunakan.

Dengan Domain Hint API, RP dapat menentukan properti domainHint di FedCM API untuk menampilkan hanya akun yang cocok bagi pengguna. IdP dapat memberikan domain_hints sebagai bagian dari respons dari daftar akun endpoint ke menunjukkan domain mana 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 ini:

{
 "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 untuk memfilter akun. Misalnya, pengguna mengunjungi corp-partner.example dan login dengan akun dari corp.example. Situs akan memanggil API sebagai berikut ini:

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 daftar akun endpoint untuk pemfilteran sisi server, karena metode tersebut dapat menjadi vektor pelacakan sidik jari ke IdP. Sebagai gantinya, Chrome melakukan permintaan FedCM seperti biasa, dan memfilter akun yang tidak sesuai dengan nilai domainHint yang ditentukan oleh navigator.credentials.get() panggilan. Kemudian, Chrome menampilkan dialog FedCM ke dengan daftar akun baru. Pendekatan ini mirip dengan Petunjuk Login API, tetapi kedua fitur ini API menjawab pertanyaan yang berbeda. Login Hint API bertujuan menjawab "yang merupakan untuk pengguna yang saya inginkan?", sedangkan {i>Domain Hint<i} bertujuan untuk menjawab perusahaan atau server 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 ketika RP hanya mengizinkan akun terkelola dalam pendaftarannya {i>checkout<i}.

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 di RP. Saat pengguna mengetuk perintah tersebut, jendela pop-up akan terbuka dengan URL login yang ditentukan dalam config . Link-nya adalah kemudian ditambahkan dengan petunjuk {i>login<i} 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.