FedCM güncellemeleri: Alan İpucu API'si

Chrome 123'ten itibaren Federated Credential Management API (FedCM) ile birlikte Alan İpuç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 sunabilir.

Alan İpucu API'si

FedCM, kullanıcıların bir kimlik sağlayıcı (IdP) tarafından sağlanan hesap bilgilerini kullanarak bağlı taraflara (RP, web sitesine yönlendiren) giriş yapmasını kolaylaştırmak için kullanılabilir. Ancak RP'nin yalnızca belirli bir alan adıyla ilişkili hesapların siteye giriş yapmasına izin verildiğini bildiği durumlar da vardır. Bu durum, özellikle erişilen sitenin kurumsal bir alan adıyla sınırlandırıldığı kurumsal senaryolarda yaygındır. FedCM API, daha iyi bir kullanıcı deneyimi sunmak için RP'nin yalnızca kısıtlanmış tarafa giriş yapmak için kullanılabilecek hesapları göstermesine olanak tanır. Bu, kullanıcının kurumsal alan dışında bir hesap kullanarak RP'ye giriş yapmaya çalıştığı, ancak doğru hesap türünün kullanılmadığı için daha sonra bir hata mesajıyla (veya girişin çalışmadığı durumlarda sessize alındığı) senaryoları önler.

RP'ler, Domain İpucu API ile yalnızca kullanıcı için eşleşen hesapları göstermek üzere bir FedCM API çağrısında domainHint özelliği belirtebilir. IdP, bir hesabın hangi alan adlarıyla ilişkilendirildiğini belirtmek için hesap listesi uç noktasından gelen yanıtın parçası olarak bir domain_hints özelliği sağlayabilir. Bu şekilde tarayıcı, istenen alan ipucunu IdP'ye bildirmeden 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 mülküyle navigator.credentials.get() çağırabilir. Örneğin, bir kullanıcının corp-partner.example sitesini ziyaret ettiğini ve corp.example hesabıyla 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ı olan hangisi?" sorusunu yanıtlarken, Alan İpucu API'si "bu hesabın hangi şirket veya sunucuya ait olması gerektiği" yanıtını vermeyi amaçlar.

domainHint: "any" kullanıldığında Chrome, alan adı olmayan (domain_hints iletilmeyen veya boş) hesapları filtreler. Örneğin bu, kısıtlanmış tarafın kayıt işleminde 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 ipucuyla eşleşen bir IdP hesabına giriş yapmasına olanak tanır. Kullanıcı isteme dokunduğunda, yapılandırma dosyasında belirtilen giriş URL'sinin yer aldığı bir pop-up pencere açılır. Ardından bağlantıya giriş ipucu ve alan ipucu sorgu parametreleri eklenir.

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