Chrome 116; Login Hint API, User Info API ve RP Context API gibi FedCM özelliklerini içerir ve IdP Sign-In Status API için kaynak denemesini başlatır.
Chrome 116'da Chrome, aşağıdaki üç yeni Federated Credential Management (FedCM) özelliğini kullanıma sunuyor:
- Login Hint API: Oturum açılacak tercih edilen kullanıcı hesabını belirtin.
- User Info API: Kimlik sağlayıcının (IdP) bir iframe içinde kişiselleştirilmiş bir oturum açma düğmesi oluşturabilmesi için geri gelen kullanıcının bilgilerini getirin.
- RP Context API: FedCM iletişim kutusunda "Oturum aç"tan farklı bir başlık kullanın.
Ayrıca Chrome, IdP oturum açma durumu API'si için kaynak denemesi başlatıyor. IdP oturum açma durumu API'si zorunludur ve kullanıma sunulduğunda önemli bir değişiklik olacaktır. FedCM'nin mevcut bir uygulamasını kullanıyorsanız kaynak denemesine katıldığınızdan emin olun.
Login Hint API
FedCM çağrıldığında tarayıcı, belirtilen kimlik sağlayıcıdaki (IdP) oturum açılmış hesabı gösterir. IdP birden fazla hesabı desteklediğinde oturum açılan tüm hesapları listeler.

Kullanıcı oturum açtıktan sonra, bazen güvenen taraf (RP) kullanıcıdan yeniden kimlik doğrulaması yapmasını ister. Ancak kullanıcı, hangi hesabı kullandığından emin olmayabilir. RP, oturum açılacak hesabı belirtebilirse kullanıcının hesap seçmesi daha kolay olur. Giriş ipucu, Chrome 116'da kullanıma sunuluyor. Bu özellik sayesinde RP, listeyi tek bir öğeye daraltabilir.
Bu uzantı, IdP'den gelen accounts list
endpoint yanıtına IdP'nin desteklediği tüm olası filtre türleriyle birlikte bir dizi login_hints
ekler. Örneğin, bir IdP e-postaya ve kimliğe göre filtrelemeyi desteklediğinde hesaplar yanıtı aşağıdaki gibi görünebilir:
{
"accounts": [{
"id": "demo1",
"email": "demo1@example.com",
"name": "John Doe",
"login_hints": ["demo1", "demo1@example.com"],
...
}, {
"id": "demo2",
"email": "demo2@example.com",
"name": "Jane Doe",
"login_hints": ["demo2", "demo2@example.com"],
...
}, ...]
}
RP, hesaplar listesinde login_hints
değerini ileterek belirtilen hesabı seçerek göstermek için aşağıdaki kod örneğinde gösterildiği gibi loginHint
özelliğiyle navigator.credentials.get()
işlevini çağırabilir:
return await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/manifest.json",
clientId: "123",
nonce: nonce,
loginHint : "demo1@example.com"
}]
}
});
User Info API
Kullanıcıların kimlik federasyonu ile oturum açmasına olanak tanıyan, IdP'nin logosuyla süslenmiş oturum açma düğmeleri artık yaygın olarak kullanılıyor. Ancak, düğmeyi kullanıcının profil simgesi ve bilgileriyle süslemek, özellikle kullanıcı daha önce bu web sitesine IdP ile kaydolduysa oturum açma işlemini daha da sezgisel hale getirir.


Ancak kişiselleştirilmiş düğme, düğmeyi oluşturmak için oturum açmış kullanıcıyı tanımlamak üzere bir iFrame içindeki IdP alanındaki üçüncü taraf çerezlerine bağlı olduğundan üçüncü taraf çerezleri desteği sonlandırıldığında kullanılamayacaktır.
Chrome 116'da kullanıma sunulan User Info API, IdP'nin üçüncü taraf çerezlerine bağlı kalmadan sunucudan geri gelen kullanıcının bilgilerini almasını sağlar.
API'nin, kullanıcı bilgilerini alabilmesi ve RP yüzeyinin bir parçasıymış gibi kişiselleştirilmiş bir düğme oluşturabilmesi için RP web sitesine yerleştirilmiş bir iFrame'den IdP tarafından çağrılması beklenir. API çağrısıyla tarayıcı, accounts list endpoint'ine istekte bulunur ve ardından şu durumlarda kullanıcı bilgilerinden oluşan bir dizi döndürür:
- Kullanıcı, geçmişte aynı tarayıcı örneğinde FedCM aracılığıyla IdP ile RP'de oturum açmış ve veriler temizlenmemiştir.
- Kullanıcı, aynı tarayıcı örneğinde IdP'de oturum açmış olmalıdır.
// Iframe displaying a page from the https://idp.example origin
const user_info = await IdentityProvider.getUserInfo({
configUrl: "https://idp.example/fedcm.json",
clientId: "client1234"
});
// IdentityProvider.getUserInfo returns an array of user information.
if (user_info.length > 0) {
// Chrome puts returning accounts first, so the first account received is guaranteed to be a returning account.
const name = user_info[0].name;
const given_name = user_info[0].given_name;
const display_name = given_name ? given_name : name;
const picture = user_info[0].picture;
const email = user_info[0].email;
// Renders the personalized sign-in button with the information above.
}
Kimlik sağlayıcıyla aynı kaynağa sahip bir iFrame'den IdentityProvider.getUserInfo()
çağrılmasına izin vermek için yerleştirme HTML'sinin identity-credentials-get
permissions
policy ile açıkça izin vermesi gerektiğini unutmayın.
<iframe src="https://fedcm-demo-idp.dev" allow="identity-credentials-get"></iframe>
Bu özelliği https://fedcm-demo-rp.dev/active-mode adresinde deneyebilirsiniz.
RP Context API
Chrome 116'da kullanıma sunulan RP Context API, bir RP'nin FedCM iletişim kutusu kullanıcı arayüzündeki dizeyi değiştirmesine olanak tanır. Böylece, önceden tanımlanmış kimlik doğrulama bağlamlarını barındırabilir. Farklı seçenekler için aşağıdaki ekran görüntülerine bakın:




Kullanımı basittir. identity.context
özelliğini "signin"
(varsayılan), "signup"
, "use"
veya "continue"
değerlerinden biri olarak sağlayın.
const credential = await navigator.credentials.get({
identity: {
// "signin" is the default, "signup", "use" and "continue"
// can also be used
context: "signup",
providers: [{
configURL: "https://idp.example/fedcm.json",
clientId: "1234",
}],
}
});
IdP Sign-In Status API kaynak denemesi
Chrome, Chrome 116'dan itibaren masaüstünde IdP oturum açma durumu API'si kaynak denemesini başlatır. Bu deneme daha sonra Android Chrome'da da başlatılır. Kaynak denemeleri, kullanıcılarınızın sınırlı bir süre boyunca deneyebileceği işlevler oluşturmak için yeni veya deneysel bir özelliğe erişmenizi sağlar. Bu özellik, herkese sunulmadan önce denenebilir.
IdP Sign-In Status API bir IdP'nin tarayıcıyı kullanıcının IdP'deki oturum açma durumu hakkında bilgilendirdiği bir mekanizmadır. Bu API sayesinde tarayıcı, IdP'ye yapılan gereksiz istekleri azaltabilir ve olası zamanlama saldırılarını önleyebilir.
Tarayıcıyı kullanıcının oturum açma durumu hakkında bilgilendirme
IdP'ler, kullanıcı IdP'de oturum açtığında veya tüm IdP hesaplarından oturumunu kapattığında bir HTTP başlığı göndererek ya da bir JavaScript API'si çağırarak kullanıcının oturum açma durumunu tarayıcıya bildirebilir. Tarayıcı, durumu "sign-in" (oturum açma), "sign-out" (oturum kapatma) veya "unknown" (bilinmiyor) (varsayılan) olarak kaydeder.
Kullanıcının oturum açtığını belirtmek için üst düzey gezinme veya aynı kaynaklı alt kaynak isteğinde bir IdP-SignIn-Status: action=signin
HTTP başlığı gönderin:
IdP-SignIn-Status: action=signin
Alternatif olarak, JavaScript API'yi IdentityProvider.login()
IdP kaynaklı olarak çağırın:
IdentityProvider.login()
Bu etkinlikler, kullanıcının oturum açma durumunu "oturum açma" olarak kaydeder. Kullanıcının oturum açma durumu "oturum açma " olarak ayarlandığında, FedCM'yi çağıran PR, IdP'nin hesap listesi uç noktasına istek gönderir ve FedCM iletişim kutusunda kullanıcının kullanabileceği hesapları gösterir.
Kullanıcının tüm hesaplarından oturumunun kapatıldığını belirtmek için üst düzey bir gezinme veya aynı kaynaklı bir alt kaynak isteğinde IdP-SignIn-Status: action=signout-all
HTTP başlığını gönderin:
IdP-SignIn-Status: action=signout-all
Alternatif olarak, JavaScript API'yi IdentityProvider.logout()
IdP kaynaklı olarak çağırın:
IdentityProvider.logout()
Bu etkinlikler, kullanıcının oturum açma durumunu "oturum kapatma" olarak kaydeder. Kullanıcının oturum açma durumu "oturum kapatma " olduğunda, FedCM'yi çağırma işlemi, IdP'nin hesap listesi uç noktasına istekte bulunmadan sessizce başarısız olur.
Varsayılan olarak, IdP oturum açma durumu "bilinmiyor" olarak ayarlanır. Bu durum, IdP, IdP oturum açma durumu API'sini kullanarak bir sinyal göndermeden önce kullanılır. Bu API'yi gönderdiğimizde kullanıcı IdP'de oturum açmış olabileceğinden ve FedCM ilk kez çağrıldığında IdP'nin bunu tarayıcıya bildirme şansı olmayabileceğinden, daha iyi bir geçiş için bu durumu kullanıma sunuyoruz. Bu durumda, IdP'nin hesap listesi uç noktasına istekte bulunuruz ve durumu, hesap listesi uç noktasından gelen yanıta göre güncelleriz:
- Uç nokta etkin hesapların listesini döndürürse durumu "sign-in" olarak güncelleyin ve bu hesapları göstermek için FedCM iletişim kutusunu açın.
- Uç nokta hesap döndürmezse durumu "sign-out" olarak güncelleyin ve FedCM çağrısını başarısız yapın.
Kullanıcı oturumunun süresi dolarsa ne olur? Kullanıcının dinamik oturum açma akışı üzerinden oturum açmasına izin verme
IdP, kullanıcının oturum açma durumu hakkında tarayıcıyı bilgilendirmeye devam etse de oturumun süresi dolduğunda olduğu gibi senkronizasyon bozulabilir. Tarayıcı, oturum açma durumu "oturum açma" olduğunda hesap listesi uç noktasına kimlik bilgileri içeren bir istek göndermeye çalışır ancak oturum artık kullanılamadığından sunucu bu isteği reddeder. Böyle bir senaryoda tarayıcı, kullanıcının pop-up penceresi aracılığıyla IdP'de oturum açmasına dinamik olarak izin verebilir.
FedCM iletişim kutusunda aşağıdaki resimde gösterildiği gibi bir mesaj görüntülenir:

Devam düğmesini tıkladığınızda tarayıcı, kullanıcıyı IdP'nin oturum açma sayfasına yönlendiren bir pop-up pencere açar.

Oturum açma sayfası URL'si (IdP'nin kaynağı olmalıdır) signin_url
ile IdP yapılandırma
dosyasının bir parçası olarak belirtilebilir.
{
"accounts_endpoint": "/auth/accounts",
"client_metadata_endpoint": "/auth/metadata",
"id_assertion_endpoint": "/auth/idtokens",
"signin_url": "/signin"
}
}
Pop-up pencere, birinci taraf çerezlerini kullanan normal bir tarayıcı penceresidir. İçerik penceresinde olanlar IdP'ye bağlıdır ancak RP sayfasına kaynaklar arası iletişim isteği göndermek için pencere tutamaçları kullanılamaz. Kullanıcı oturum açtıktan sonra IdP şunları yapmalıdır:
- Kullanıcının oturum açtığını tarayıcıya bildirmek için
IdP-SignIn-Status: action=signin
üstbilgisini gönderin veyaIdentityProvider.login()
API'sini çağırın. - Pop-up pencereyi kapatmak için
IdentityProvider.close()
işlevini çağırın.
// User is signed in...
// Don't forget feature detection.
if (IdentityProvider) {
// Signal to the browser that the user has signed in.
IdentityProvider.close();
}
IdP oturum açma durumu API davranışını demomuzda deneyebilirsiniz. Demo kimlik sağlayıcıda oturum açtıktan üç dakika sonra oturumun süresi dolar. Ardından, pop-up pencere davranışı aracılığıyla IdP'de oturum açma işlemini gözlemleyebilirsiniz.
Kaynak denemesine katılma
Bir Chrome
flag'ini
chrome://flags#fedcm-idp-signin-status-api
etkinleştirerek
IdP oturum açma durumu API'sini Chrome 116 veya sonraki sürümlerde yerel olarak deneyebilirsiniz.
Ayrıca, IdP oturum açma durumu API'sini bir kaynak denemesini iki kez kaydederek de etkinleştirebilirsiniz:
- IdP için bir kaynak denemesi kaydedin.
- RP için üçüncü taraf kaynaklı deneme kaydettirin.
Kaynak denemeleri, yeni özellikleri denemenize ve web standartları topluluğuna bu özelliklerin kullanılabilirliği, pratikliği ve etkinliği hakkında geri bildirim vermenize olanak tanır. Daha fazla bilgi için Web Geliştiricileri İçin Kaynak Denemeleri Kılavuzu'na göz atın.
IdP Sign-In Status API kaynak denemesi, Chrome 116'dan Chrome 119'a kadar kullanılabilir.
IdP için bir kaynak denemesi kaydetme
- Origin denemesi kayıt sayfasına gidin.
- Register (Kaydol) düğmesini tıklayın ve jeton istemek için formu doldurun.
- IdP'nin kaynağını Web Origin (Web Kaynağı) olarak girin.
- Gönder'i tıklayın.
IdentityProvider.close()
kullanan sayfaların başlık bölümüneorigin-trial
<meta>
etiketi ekleyin. Örneğin, bu şöyle görünebilir:
<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
.
RP için üçüncü taraf deneme kaydı oluşturma
- Origin denemesi kayıt sayfasına gidin.
- Register (Kaydol) düğmesini tıklayın ve jeton istemek için formu doldurun.
- IdP'nin kaynağını Web Origin (Web Kaynağı) olarak girin.
- Jetonu diğer kaynaklarda JavaScript ile yerleştirmek için Üçüncü taraf eşleştirme'yi işaretleyin.
- Gönder'i tıklayın.
- Verilen jetonu üçüncü taraf web sitesine yerleştirin.
Jetonu üçüncü taraf web sitesine yerleştirmek için aşağıdaki kodu IdP'nin kaynağında sunulan JavaScript kitaplığınıza veya SDK'nıza ekleyin.
const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);
TOKEN_GOES_HERE
öğesini kendi jetonunuzla değiştirin.
Etkileşim kurma ve geri bildirim paylaşma
Geri bildiriminiz varsa veya test sırasında herhangi bir sorunla karşılaşırsanız bunları crbug.com adresinden paylaşabilirsiniz.
Dan Cristian Pădureț'in Unsplash'teki fotoğrafı