FedCM güncellemeleri: API bağlantısını kesme ve iki güncelleme

Chrome 122'den itibaren, Birleştirilmiş Kimlik Bilgisi için Bağlantıyı Kesme API'si Management API'yi (FedCM) kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan Bağlantıyı kesme API'si, bağlı tarafların, kullanıcılarının üçüncü taraf çerezlerine gerek kalmadan kimlik sağlayıcının hesabını kullanır. Ayrıca FedCM'nin aynı siteyi işleme sürecinde yapılan iki güncellemedir.

API bağlantısını kes

Bir kullanıcı bağlı bir tarafta (RP - kimlik doğrulama için kimlik sağlayıcı) kimlik federasyonu, kimlik doğrulama provider (IdP: kimlik doğrulama ve hesap bilgilerini sağlayan hizmet) diğer taraflara) gönderilir) genellikle bağlantıyı kendi sunucusunda kaydeder. Depolanan bağlantısı, IdP'nin kullanıcının oturum açtığı ve kısıtlanmış olan kısıtlanmış tarafları takip etmesine olanak tanır. deneyimlerini optimize etmek için kullanır. Örneğin, kullanıcılar web sitenizi ziyaret ettiğinde daha sonra IdP'ye geri döndüğünde, IdP'ye sahip kullanıcı hesabı otomatik yeniden kimlik doğrulama ve otomatik doğrulama gibi özelliklere kullanılan hesabı gösteren kişiselleştirilmiş düğmeler.

IdP'ler bazen hesabın kısıtlanmış taraf ile bağlantısını kesmek için bir API sunar. Ancak bağlantı kesme akışının kimliği doğrulandı ve IdP çerezlerinin kullanılması gerekiyor. Dünyada Üçüncü taraf çerezleri olmadan, kullanıcı RP'yi ziyaret ettiğinde herhangi bir tarayıcı Kısıtlanmış tarafın IdP ile bağlantısını kesmesi için API. Birden fazla IdP olabileceği için aynı IdP'den alınmış hesaplarsa, bağlantı kaldırma akışı bilmeniz gerekir.

Bağlantıyı kesme API Kullanıcının, tarayıcıda IdP hesabının RP ile bağlantısını kesmesine de olanak tanır. aynı IdP sunucusundaki gibi belirler. Kullanıcının ihtiyaçlarını Birleşik Kimlik Bilgisi'ni kullanarak kimlik federasyonundan geçmiş olmak Management API'yi (FedCM) tıklayın. Bağlantı kesildiğinde, kullanıcı yeni bir kullanıcı kullanıcı tarafından etkinleştirilebilir.

IdP'nin Kısıtlanmış Taraf ile bağlantısını kesme

Kullanıcı daha önce FedCM aracılığıyla IdP'yi kullanarak Kısıtlanmış Taraf'ta oturum açtıysa tarayıcı tarafından yerel olarak bağlı olan bağlı liste hesaplar. Kısıtlanmış taraf, IdentityCredential.disconnect() işlevi. Bu işlev, üst düzey RP çerçevesi. Kısıtlanmış tarafın, kullandığı clientId olan configURL öğesini geçirmesi gerekir. ve IdP'nin bağlantısının kaldırılması için bir accountHint girin. Hesap ipucu, bağlantı kesme uç noktası tanımlayabildiği sürece rastgele bir dize olabilir. bir e-posta adresi veya kullanıcı kimliği gibi, hesap listesi uç noktasının sağladığı hesap kimliğiyle eşleşmelidir:

// 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(), Promise döndürür. Bu vaat bir istisnayı kapsayabilir:

  • Kullanıcı, FedCM üzerinden IdP'yi kullanarak Kısıtlanmış Taraf'ta oturum açmamıştır.
  • API, FedCM izin politikası olmadan bir iFrame içinden çağrılır.
  • configURL geçersiz veya bağlantı kesme uç noktası yok.
  • İçerik Güvenliği Politikası (İGP) denetimi başarısız olur.
  • 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ı bir yanıtında, Kısıtlanmış Taraf ve IdP'nin bağlantısı kesilir. ve vaatleri tamamlanacak. Bağlantısı kesilen kullanıcı hesapları, bağlantı kesme işleminden uç nokta.

IdP yapılandırma dosyasını ayarlayın

Bağlantıyı kesme API'sini desteklemek için IdP'nin, bağlantı kesme özelliğini desteklemesi gerekir. uç noktası ile birlikte IdP'de disconnect_endpoint özelliğini ve yolunu sağlayın yapılandırma dosyası oluşturun.

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

Bağlantı kesme uç noktasında hesabın bağlantısını kesin

IdentityCredential.disconnect() çağrıldığında, tarayıcı bir çapraz kaynak gönderir Çerezler ve şu içerik türü ile POST isteği: application/x-www-form-urlencoded şu bilgileri bulabilirsiniz:

Özellik Açıklama
account_hint IdP hesabıyla ilgili bir ipucu.
client_id Kısıtlanmış tarafın müşteri 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

İsteği aldıktan sonra IdP sunucusu şunları yapmalıdır:

  1. İsteğe CORS (Kaynaklar Arası Kaynak) ile yanıt verin Paylaşım).
  2. İsteğin bir Sec-Fetch-Dest: webidentity HTTP başlığı içerdiğini doğrulayın.
  3. Origin başlığını, client_id tarafından belirlenen RP kaynağıyla eşleştirin. Eşleşmiyorlarsa reddedin.
  4. account_hint ile eşleşen hesabı bulun.
  5. Kullanıcı hesabının, kısıtlanmış taraf hesapları listesinden bağlantısını kesin.
  6. Tarayıcıya, JSON dosyasında tanımlanan kullanıcının account_id ile yanıt verin biçimindedir.
ziyaret edin.

Örnek bir yanıt JSON yükü şu şekilde görünür:

{
  "account_id": "account456"
}

IdP, tarayıcının şununla ilişkilendirilmiş tüm hesapların bağlantısını kesmesini isterse: herhangi bir hesap kimliğiyle eşleşmeyen bir dize (ör. "*") iletin.

Kısıtlanmış taraf ve IdP aynı sitede olduğunda /.well-known/web-identity kontrolü artık atlanıyor

Bir FedCM sistemi geliştirirken RP sunucu alanlarını test etmek veya hazırlamak Üretim IdP sunucusunun alt alan adları için geçerlidir. Örneğin, üretim IdP sunucusu idp.example konumunda ve hem hazırlık RP sunucusu hem de hazırlık IdP sunucusunda staging.idp.example konumunda. Ancak, iyi bilinen dosyanın IdP sunucusunun eTLD+1'inin kökünde, bulunduğu konumda olmalıdır. idp.example/.well-known/web-identity ve üretim sunucusudur. Başlangıç geliştiricilerin üretime dosya yerleştirmesi her zaman mümkün değildir ortamı geliştirme aşamasında olması, bu onların FedCM'yi test etmesini engeller.

Chrome 122 sürümünden itibaren, RP alanı ile IdP alanı aynıysa Chrome bilinen dosyayı kontrol etmeyi atlar. Bu şekilde, geliştiriciler anlatacağım.

Alt kaynaklar artık aynı siteye giriş durumunu ayarlayabilir

Önceden, Chrome sadece giriş durum ( örneğin Set-Login: logged-in başlığını kullanarak) için aynı kaynak üstlenme yaşarlar. Bu, aynı-site Giriş durumunu ayarlayan fetch() istek.

Örneğin, kullanıcıların kullanıcı adlarını ve bilgilerini girmelerine izin veren şifre idp.example adresindedir ancak kimlik bilgileri login.idp.example adresinde yayınlanır fetch() ile. Giriş Durumu'nu kullanarak giriş durumunu tarayıcıya kaydetme İki alan adı çapraz kaynak olduğu ve aynı siteye ait olduğu için API mümkün değildi.

Bu değişiklikle, aynı site içerir ve yukarıdaki örneğin, tüm üst öğelerin login.idp.example kullanıcısının HTTP üstbilgisi (Set-Login: logged-in) kullanan giriş durumu.

Özet

FedCM artık Bağlantıyı Kesme API'sini kullanarak Kısıtlanmış Taraf'ın IdP ile bağlantısını kesebilir üçüncü taraf çerezlerine bağımlı kalmadan kullanabilirsiniz. Bunun için şu numarayı arayın: Kısıtlanmış taraf IdentityCredential.disconnect(). Bu işlevle, tarayıcı IdP'nin sunucudaki ve ardından tarayıcıda bulunan bağlantıdır.

Kısıtlanmış taraf, isteğe bağlı olarak /.well-known/web-identity kontrolünün atlandığını duyurduk. ve IdP'ler test amacıyla aynı sitedeyse. Ayrıca, giriş bilgisi aynı sitenin IdP alt kaynağından gelen bir HTTP yanıt başlığı aracılığıyla durum artık gösterilmektedir. yapmasını sağlar.