FedCM güncellemeleri: Alan İpucu API'si

Chrome 123'ten itibaren Federated Credential Management API (FedCM) ile birlikte alan ipuçlarını kullanabilirsiniz. Alan İpucu API'si sayesinde geliştiriciler, yalnızca kabul ettikleri alandaki birleşik giriş hesaplarını göstererek daha iyi bir kullanıcı deneyimi sağlayabilir.

Domain Hint API

FedCM, kullanıcının kimlik sağlayıcısı (IdP) tarafından sağlanan hesap bilgilerini kullanarak bağlı tarafa (RP, web sitesine yönlendirme) giriş yapmasını kolaylaştırmak için kullanılabilir. Bununla birlikte, Kısıtlanmış Taraf'ın yalnızca belirli bir alan adıyla ilişkilendirilmiş hesapların siteye giriş yapmasına izin verildiğini zaten bildiği durumlar vardır. Bu durum özellikle erişilen sitenin kurumsal alanla sınırlı olduğu kurumsal senaryolarda yaygındır. FedCM API, daha iyi bir kullanıcı deneyimi sağlamak için RP'nin yalnızca Kısıtlanmış Taraf'a giriş yapmak için kullanılabilecek hesapları göstermesine olanak tanır. Bu, kullanıcının kurumsal alanın dışındaki bir hesap kullanarak RP'ye giriş yapmaya çalıştığı ancak doğru hesap türü kullanılmadığı için daha sonra bir hata mesajı (veya girişin işe yaramadığı durumlarda sessiz kalma) aldığı senaryoları önler.

Alan adı ipucu API'si ile RP'ler, yalnızca kullanıcıyla eşleşen hesapları göstermek için FedCM API çağrısında bir domainHint mülkü belirtebilir. Kimlik sağlayıcı, bir hesabın hangi alan adlarıyla ilişkili olduğunu belirtmek için hesap listesi uç noktasından gelen yanıtın bir parçası olarak domain_hints mülkü sağlayabilir. Bu şekilde tarayıcı, istenen alan ipucunu IdP'ye açıklamadan eşleşen hesapları gösterebilir.

Hesap listesi uç noktasından alınan örnek bir JSON yanıtı aşağıdaki gibi görünür:

{
 "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"]
  }]
}

Kısıtlanmış taraf, hesapları filtrelemek için domainHint özelliğiyle navigator.credentials.get() öğesini çağırabilir. Örneğin, bir kullanıcının corp-partner.example sitesini ziyaret ettiğini ve corp.example'daki bir hesapla oturum açtığını varsayalım. Site, API'yi aşağıdaki gibi çağırır:

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

domainHint değeri, sunucu tarafı filtreleme için hesap listesi uç noktasına gönderilmez. Bu uç nokta, IdP'ye yönelik bir dijital parmak izi vektörü olabilir. Bunun yerine, Chrome her zamanki gibi bir FedCM isteği gerçekleştirir ve navigator.credentials.get() çağrısında belirtilen domainHint değeriyle eşleşmeyen hesapları filtreler. Ardından Chrome, kullanıcıya yeni hesap listesini içeren FedCM iletişim kutusunu gösterir. Bu yaklaşım, Giriş İpucu API'sine benzer ancak bu iki API farklı soruları yanıtlar. Giriş İpucu API'si, "istediğim kullanıcının tanımlayıcısı hangisi?" sorusunun yanıtını; Alan İpucu ise "bu hesabın hangi şirkete veya sunucuya ait olması gerekiyor?" sorusunu yanıtlamayı hedefler.

domainHint: "any" kullanıldığında Chrome, alanı olmayan hesapları filtreler (yani domain_hints iletilmez veya boştur). Örneğin, bu, kısıtlanmış tarafın kayıt sürecinde yalnızca yönetilen hesaplara izin verdiği kullanım alanlarına izin verir.

domainHint ile eşleşen hesap olmadığında FedCM iletişim kutusunda bir giriş istemi gösterilir. Bu istem, kullanıcının RP tarafından istenen ipucu ile eşleşen bir IdP hesabına giriş yapmasına olanak tanır. Kullanıcı istem üzerine dokunduğunda, yapılandırma dosyasında belirtilen giriş URL'sinin yer aldığı bir pop-up pencere açılır. Bağlantıya daha sonra giriş ipucu ve alan ipucu sorgu parametreleri eklenir.

domainHint ile eşleşen hesap olmadığında gösterilen örnek giriş istemi.
domainHint ile eşleşen hesap olmadığında gösterilen örnek giriş istemi.