Chrome 122'de Federated Credential Management API (FedCM) için Connection API kullanılabilir. Bağlantıyı Kesme API'si, bağlı tarafların, üçüncü taraf çerezlerine gerek kalmadan kullanıcılarının kimlik sağlayıcı hesabıyla olan bağlantısını kesmesine olanak tanır. Ayrıca, FedCM'nin aynı site yönetimi ile ilgili birkaç güncelleme var.
API bağlantısını kes
Bir kullanıcı, kimlik federasyonu aracılığıyla bağlı bir taraf (kimlik doğrulaması için kimlik sağlayıcıyı kullanan site) olan RP'de hesap oluşturduğunda, kimlik sağlayıcı (IdP (diğer taraflara kimlik doğrulama ve hesap bilgileri sağlayan hizmet) genellikle bağlantıyı kendi sunucusuna kaydeder. Depolanan bağlantı, IdP'nin kullanıcının oturum açtığı RP'leri takip etmesine ve deneyimini optimize etmesine olanak tanır. Örneğin, kullanıcı daha sonra RP'ye geri döndüğünde daha iyi bir deneyim elde etmek için IdP'ye sahip kullanıcı hesabı, geri gelen bir hesap olarak değerlendirilir. Bu hesap, otomatik yeniden kimlik doğrulama ve kullanılan hesabı gösteren kişiselleştirilmiş düğmeler gibi özelliklere olanak tanır.
IdP'ler bazen hesabın bir kısıtlanmış taraf ile bağlantısını kesmek için bir API sunar. Ancak, bağlantı kesme akışı doğrulanır ve IdP çerezlerini gerektirir. Üçüncü taraf çerezlerinin olmadığı bir dünyada, kullanıcı RP'yi ziyaret ettiğinde RP'nin IdP ile bağlantısını kesecek bir tarayıcı API'si olmaz. Aynı IdP'den belirli bir RP'ye bağlı birden fazla IdP hesabı olabileceğinden, bağlantı kaldırma akışı hangi hesabın bağlantısının kesildiğini bilmeyi gerektirir.
Bağlantıyı Kesme API'si, kullanıcının IdP hesabını belirtilen uç noktaya yönlendirerek hem tarayıcıdaki hem de IdP sunucusundaki IdP hesabı ile bağlantısını kesmesine olanak tanır. Kullanıcının, Federated Credential Management API'yi (FedCM) kullanarak kimlik federasyonundan yararlanmış olması gerekir. Kullanıcının bağlantısı kesildikten sonra, IdP'yi kullanarak RP'de tekrar oturum açmaya çalıştığında bu kullanıcı yeni kullanıcı olarak değerlendirilir.
IdP'nin RP ile bağlantısını kesme
Bir kullanıcı daha önce IdP'yi kullanarak FedCM üzerinden RP'de oturum açtıysa bu ilişki, tarayıcı tarafından yerel olarak bağlı hesapların listesi olarak hatırlanır. RP, IdentityCredential.disconnect()
işlevini çağırarak bağlantı kesme işlemi başlatabilir. Bu işlev, üst düzey bir
RP çerçevesinden çağrılabilir. Kısıtlanmış tarafın bir configURL
, IdP altında kullandığı clientId
ve IdP'nin bağlantısının kesilebilmesi için bir accountHint
iletmesi gerekir. Hesap ipucu, bağlantıyı kesme uç noktası hesabı tanımlayabildiği sürece rastgele bir dize olabilir. Örneğin, hesap listesi uç noktasının sağladığı hesap kimliğiyle eşleşmeyen bir e-posta adresi veya kullanıcı kimliği:
// Disconnect an IdP account "account456" from the RP "https://idp.com/". This is invoked on the RP domain.
IdentityCredential.disconnect({
configURL: "https://idp.com/config.json",
clientId: "rp123",
accountHint: "account456"
});
IdentityCredential.disconnect()
bir Promise
döndürür. Bu vaat aşağıdaki nedenlerle
istisnaya yol açabilir:
- Kullanıcı, FedCM üzerinden IdP'yi kullanarak RP'de oturum açmamıştır.
- API, FedCM izin politikası olmayan bir iframe içinden çağrılır.
- configURL geçersiz veya bağlantı kesme uç noktası eksik.
- İçerik Güvenliği Politikası (İGP) kontrolü başarısız oluyor.
- Bekleyen bir bağlantı kaldırma isteği var.
- Kullanıcı, tarayıcı ayarlarında FedCM'yi devre dışı bırakmış.
IdP'nin bağlantı kesme uç noktası yanıt döndürdüğünde, tarayıcıda RP ve IdP bağlantısı kesilir ve söz konusu çözüm sonlandırılır. Bağlantısı kesilen kullanıcı hesapları, bağlantı noktasının bağlantı noktasından gelen yanıtta belirtilmiştir.
IdP yapılandırma dosyasını ayarlayın
Connection API'yi desteklemek için IdP'nin bir bağlantıyı kesme uç noktasını desteklemesi ve IdP yapılandırma dosyasında disconnect_endpoint
özelliği ile yolunu sağlaması gerekir.
{
"accounts_endpoint": "/accounts",
"id_assertion_endpoint": "/assertion",
...
"disconnect_endpoint: "/disconnect"
}
Bağlantı kesme uç noktasında hesabın bağlantısını kesme
Tarayıcı IdentityCredential.disconnect()
yöntemini çağırarak bu bağlantı kesme uç noktasına çerezler ve içerik türü içeren application/x-www-form-urlencoded
ile çapraz kaynak POST
isteği gönderir ve aşağıdaki bilgileri içerir:
Özellik | Açıklama |
---|---|
account_hint |
IdP hesabıyla ilgili ipucu. |
client_id |
Kısıtlanmış tarafın istemci tanımlayıcısı. |
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity
account_hint=account456&client_id=rp123
İstek alındıktan sonra IdP sunucusu:
- İsteği CORS (Ortamlar Arası Kaynak Paylaşımı) ile yanıtlayın.
- İsteğin
Sec-Fetch-Dest: webidentity
HTTP üst bilgisi içerdiğini doğrulayın. Origin
başlığını,client_id
tarafından belirlenen kısıtlanmış taraf kaynağıyla eşleştirin. Eşleşmiyorlarsa reddedin.account_hint
ile eşleşen hesabı bulun.- Kullanıcı hesabının, kısıtlanmış tarafın bağlı hesapları listesinden bağlantısını kesin.
- Tanımlanan kullanıcının
account_id
bilgisiyle tarayıcıya JSON biçiminde yanıt verin.
Örnek yanıt JSON yükü aşağıdaki gibi görünür:
{
"account_id": "account456"
}
IdP, tarayıcının bunun yerine RP ile ilişkilendirilmiş tüm hesapların bağlantısını kesmesini istiyorsa herhangi bir hesap kimliğiyle eşleşmeyen bir dize (ör. "*"
) iletin.
RP ve IdP aynı site olduğunda /.well-known/web-identity
kontrolü artık atlanıyor
Bir FedCM sistemi geliştirirken, test veya hazırlık RP sunucusu alanları, üretim IdP sunucusunun alt alanları olabilir. Örneğin, üretim IdP sunucusu idp.example
adresinde ve hem hazırlık RP sunucusu hem de hazırlık IdP sunucusu staging.idp.example
. Ancak, iyi bilinen dosyanın IdP sunucusunun eTLD+1'inin köküne yerleştirilmesi gerektiğinden, dosyanın idp.example/.well-known/web-identity
konumunda olması gerekir ve bu, üretim sunucusudur. Geliştiricilerin geliştirme aşamasında üretim ortamına dosya yerleştirmeleri mümkün olmadığından FedCM'yi test etmeleri engellenir.
Chrome 122'den itibaren, RP alanı ve IdP alanı aynıysa Chrome, bilinen dosyayı kontrol etmeyi atlar. Böylece geliştiriciler böyle bir senaryoda test yapabilir.
Alt kaynaklar artık aynı site giriş durumunu ayarlayabilir
Önceden, Chrome yalnızca isteğin tüm üst öğelerle aynı kaynak olduğunda giriş durumunun ayarlanmasına (örneğin, Set-Login: logged-in
üstbilgisinin kullanılmasına) izin veriyordu. Bu da aynı siteden
fetch()
isteklerinin giriş durumunu belirlemesini engelledi.
Örneğin, kullanıcıların idp.example
üzerinde kullanıcı adlarını ve şifrelerini girmelerine izin veren, ancak kimlik bilgilerinin fetch()
ile login.idp.example
adresinde yayınlandığı bir web sitesini düşünün. Giriş Durumu API'sini kullanarak giriş durumunun tarayıcıya kaydedilmesi mümkün değildi, çünkü iki alan adı çapraz kaynak ve aynı site durumundaydı.
Bu değişiklikle, Login Status API'nin tüm üst öğelerle aynı sitede olması şartını hafiflettik ve yukarıdaki örnek, login.idp.example
'in giriş durumunu HTTP üst bilgisi (Set-Login:
logged-in
) kullanarak ayarlamayı mümkün kılıyor.
Özet
FedCM, Connected API'yi kullanarak artık üçüncü taraf çerezlerine gerek kalmadan RP'nin IdP ile bağlantısını kesebilir. Bunun için kısıtlanmış tarafta
IdentityCredential.disconnect()
numaralı telefonu arayın. Bu işlev sayesinde tarayıcı, IdP'nin sunucudaki ve ardından tarayıcıdaki bağlantıyı sonlandırabilmesi için IdP'nin bağlantı kesme uç noktasına bir istek gönderir.
Test amacıyla, RP ve IdP aynı sitedeyken /.well-known/web-identity
kontrolünün atlandığını duyurmuştuk. Ayrıca, artık aynı sitenin IdP alt kaynağından HTTP yanıt başlığı aracılığıyla bir giriş durumu ayarlamak mümkündür.