FedCM güncellemeleri: Giriş Durumu API'si, Hata API'si ve Otomatik Olarak Seçili İşaretleme API'si

Chrome 120, FedCM için Login Status API'yi gönderiyor. Login Status API (önceki adıyla IdP Oturum Açma Durum API) kullanıcıları web sitenize erişirken tarayıcıya sinyal vermek için ve çıkış yapabilirsiniz. Bu sinyal, FedCM tarafından sessiz zamanlama saldırısını ele almak için kullanılır ve bunu yaparak FedCM'nin üçüncü taraf olmadan çalışmasına olanak çerezlerinin tamamını kullanın. Bu güncelleme, daha önce oluşturduğumuz geriye dönük uyumsuz son değişiklikleri, Bu sözleşmenin amacı, FedCM, çalışma kapsamımız kapsamındadır.

Giriş Durumu API'si, gizlilik mülkünü ve kullanılabilirliği iyileştirse de geriye dönük olarak uyumsuz değişiklik olabilir. Mevcut bir aşağıdaki adımları izleyerek güncellediğinizden emin olun: bakın.

Chrome ayrıca, Chrome'un sunduğu iki yeni Federated Credential Management (Birleştirilmiş Kimlik Bilgisi Yönetimi) (FedCM) özellikleri:

  • Error API: Oturum açma denemeleri başarısız olduğunda kullanıcıları yerel bir kullanıcı arayüzüyle bilgilendir kimlik onayı uç noktasından gelen sunucu yanıtına göre (varsa) temel alınır.
  • Auto-Selected Flag API: Kimlik sağlayıcıya (IdP) bildirim gönderin ve kimlik bilgisi akışta otomatik olarak seçilmişse bağlı taraf (RP) içerir.

Giriş Durumu API'sı

Giriş Durumu API'si, bir web sitesinin (özellikle bir IdP'nin) kullandığı bir mekanizmadır. Tarayıcı, kullanıcının IdP'deki giriş durumu. Bu API ile tarayıcı IdP'ye yapılan gereksiz istekleri azaltma ve olası zamanlama saldırılarını hafifletme.

Tarayıcıyı, kullanıcının giriş durumu hakkında bilgilendirin

IdP'ler, bir HTTP üstbilgisi göndererek kullanıcının giriş durumunu tarayıcıya bildirebilir veya kullanıcı IdP'de oturum açtığında veya kullanıcısının tüm IdP hesaplarındaki oturumu kapatılır. Her bir IdP (IdP) için yapılandırma URL'si) kullanıyorsa tarayıcı, giriş durumunu temsil eden bir üç durumlu değişken tutar olası değerlerle logged-in, logged-out ve unknown. Varsayılan durum unknown.

Kullanıcının oturum açtığını bildirmek için bir Set-Login: logged-in HTTP üst bilgisi gönderin isteği gönderin:

Set-Login: logged-in

Alternatif olarak, JavaScript API'sini navigator.login.setStatus('logged-in') çağırın şu IdP kaynağını kullanabilirsiniz:

navigator.login.setStatus('logged-in');

Bu aramalar, kullanıcının giriş durumunu logged-in olarak kaydeder. Kullanıcı giriş yaptığında durum logged-in olarak ayarlanırsa RP araması FedCM, IdP'nin hesaplar uç noktasını listeler ve FedCM'de kullanılabilir hesapları gösterir. iletişim kutusu.

Kullanıcının tüm hesaplarındaki oturumunun kapatıldığını bildirmek için üst düzey gezinme bölümünde veya aynı kaynak alt kaynağından Set-Login: logged-out HTTP üst bilgisi gönderin istek:

Set-Login: logged-out

Alternatif olarak, IdP'den JavaScript API'yi navigator.login.setStatus('logged-out') çağırabilirsiniz. kaynak:

navigator.login.setStatus('logged-out');

Bu aramalar, kullanıcının giriş durumunu logged-out olarak kaydeder. Kullanıcı giriş yaptığında durumu logged-out. FedCM çağrışımı, herhangi bir IdP'nin hesap listesi uç noktasına yönelik istek.

unknown durumu, IdP giriş bilgilerini kullanarak sinyal göndermeden önce ayarlanır. Status API'ye dokunun. Bu durumu daha iyi bir geçiş için sunduk. Çünkü kullanıcı Bu API'yi gönderdiğimizde IdP'de zaten oturum açmış durumdasınız. IdP, bunu, FedCM ilk kez çağrıldığında tarayıcıya bildirme şansı. İçinde Bu durumda, IdP'nin hesap listesi uç noktasına bir istekte bulunur ve hesap listesi uç noktasından gelen yanıta göre durumu:

  • Uç nokta etkin hesapların listesini döndürürse durumu şu şekilde güncelleyin: logged-in tıklayın ve FedCM iletişim kutusunu açarak bu hesapları görüntüleyin.
  • Uç nokta hiçbir hesap döndürmezse durumu logged-out olarak güncelleyin ve başarısız olabilir.

Kullanıcı oturumunun süresi dolarsa ne olur? Kullanıcının dinamik bir giriş akışıyla oturum açmasına izin verin.

IdP, kullanıcının giriş durumunu tarayıcıya sürekli olarak bildirse de oturumun sona ermesi gibi durumlar senkronize olmayabilir. Tarayıcı, oturum açıldığında, hesap listesi uç noktasına kimlik bilgileri içeren bir istek gönderilmesini sağlar. durum logged-in, ancak oturum devam ettiği için sunucu hiçbir hesap döndürmedi artık kullanılamıyor. Böyle bir senaryoda, tarayıcı otomatik olarak kullanıcının bir iletişim kutusu üzerinden IdP'de oturum açmasını sağlayın.

FedCM iletişim kutusunda, aşağıdaki resimde gösterildiği gibi oturum açmayı öneren bir mesaj görüntülenir.

IdP'de oturum açmanızı öneren FedCM iletişim kutusu.
IdP'de oturum açmanızı öneren bir FedCM iletişim kutusu.

Kullanıcı Devam düğmesini tıkladığında tarayıcı, IdP'nin giriş sayfasına gidin.

Örnek iletişim kutusu.
IdP'de oturum açma düğmesi tıklandıktan sonra gösterilen örnek bir iletişim kutusu.
ziyaret edin.

Giriş sayfası URL'si, IdP yapılandırmasının bir parçası olarak login_url ile belirtilir. dosyası olduğundan emin olun.

{
  "accounts_endpoint": "/auth/accounts",
  "client_metadata_endpoint": "/auth/metadata",
  "id_assertion_endpoint": "/auth/idtokens",
  "login_url": "/login"
  }
}

İletişim kutusu, birinci taraf çerezlerine sahip normal bir tarayıcı penceresidir. Her neyse IdP'ye bağlıdır ve herhangi bir pencere tanıtıcısı kullanılamaz RP sayfasına erişim izni isteyebilir. Kullanıcı oturum açtığında IdP şunları yapmalıdır:

  • Set-Login: logged-in üstbilgisini gönderin veya navigator.login.setStatus("logged-in") API'sini kullanarak tarayıcıya kullanıcı oturum açtı.
  • İletişim kutusunu kapatmak için IdentityProvider.close() öğesini çağırın.
ziyaret edin.
Bir kullanıcı, FedCM'yi kullanarak IdP'de oturum açtıktan sonra Kısıtlanmış Taraf'ta oturum açıyor.
Bir kullanıcı, FedCM'yi kullanarak IdP'de oturum açtıktan sonra Kısıtlanmış Taraf'ta oturum açıyor.
ziyaret edin.

Login Status API davranışını şurada deneyebilirsiniz: demo'ya gidin.

  1. IdP'ye git ve oturum aç düğmesine dokunun.
  2. Rastgele bir hesapla oturum açın.
  3. Hesap Durumu açılır menüsünden Oturumun Süresi Doldu'nu seçin.
  4. Kişisel bilgileri güncelle düğmesine basın.
  5. FedCM'yi denemek için Kısıtlanmış Taraf'ı ziyaret edin düğmesine dokunun.

IdP'ye giriş işlemini modül davranışı üzerinden gözlemleyebilirsiniz.

Hata API'sı

Chrome, kimlik onayı uç noktasına bir istek gönderdiğinde (örneğin, bir Kullanıcı, FedCM kullanıcı arayüzündeki veya otomatik yeniden kimlik doğrulamadaki Farklı devam et düğmesini tıkladığında tetiklendiğinde, IdP geçerli nedenlerle bir jeton yayınlayamayabilir. Örneğin, istemci yetkisizyse sunucu geçici olarak kullanılabilir değil vb. Şu an için Chrome aşağıdaki durumlarda isteği sessizce devre dışı bırakır: Söz konusu hataları düzeltmeye çalışır ve yalnızca verdiği sözü reddederek Kısıtlanmış Taraf'a bildirim gönderir.

Error API ile Chrome, tarafından sağlanan hata bilgileriyle yerel bir kullanıcı arayüzü göstererek kullanıcıyı bilgilendirir yapılandırdığınızdan emin olun.

Kullanıcının oturum açma girişimi başarısız olduktan sonraki hata mesajını gösteren FedCM iletişim kutusu. Dize, hata türüyle ilişkilendirilir.
Kullanıcının oturum açma girişimi başarısız olduktan sonraki hata mesajını gösteren FedCM iletişim kutusu. Dize, hata türüyle ilişkilendirilir.

IdP HTTP API'si

id_assertion_endpoint yanıtında IdP, ve web tarayıcısı. Bu teklifte, bir sertifikanın verilemiyorsa IdP "hata" döndürebilir ve bu yanıtta iki yeni isteğe bağlı alanlar:

  1. code
  2. url
// id_assertion_endpoint response
{
  "error": {
     "code": "access_denied",
     "url": "https://idp.example/error?type=access_denied"
  }
}

IdP, kod için OAuth 2.0'daki bilinen hatalardan birini seçebilir. belirtilen hata liste [invalid_request, unauthorized_client, access_denied, server_error ve temporarily_unavailable] veya rastgele bir dize kullanın. İkinci durumda Chrome, hata kullanıcı arayüzünü genel bir hata mesajıyla oluşturur ve kodu Kısıtlanmış Taraf

url için, hatasını döndürür. Bu alan Tarayıcılar, yerel bir dilde zengin hata mesajları sağlayamadığından, kullanıcılar Kullanıcı arayüzü. Örneğin, sonraki adımlar için bağlantılar, müşteri hizmetleri iletişim bilgileri ve bu şekilde devam eder. Kullanıcı hata ayrıntıları ve hatanın nasıl düzeltileceği hakkında daha fazla bilgi edinmek isterse daha fazla ayrıntı için tarayıcının kullanıcı arayüzünden sağlanan sayfayı ziyaret edebilir. URL configURL, IdP ile aynı sitede olmalıdır.

try {
  const cred = await navigator.credentials.get({
    identity: {
      providers: [
        {
          configURL: 'https://idp.example/manifest.json',
          clientId: '1234',
        },
      ],
    }
  });
} catch (e) {
  const code = e.code;
  const url = e.url;
}

Otomatik Olarak Seçilen İşaretleme API'si

mediation: optional, varsayılan kullanıcı uyumlulaştırmasıdır davranış otomatik olarak yeniden kimlik doğrulamayı tetikler. yapmasını sağlar. Ancak otomatik yeniden kimlik doğrulama, kullanılamıyor bunu yalnızca tarayıcı bilir; kullanım dışı olduğunda kullanıcıdan açık kullanıcı uyumlulaştırmasıyla birlikte. Bu, farklı özelliklere sahip bir akıştır.

  • API çağrısı yapan bir kullanıcının bakış açısından, bir kimlik jetonu aldıklarında otomatik olarak yeniden kimlik doğrulama işleminin sonucu olup olmadığını görebilir akışı sağlar. Bu da API performansını değerlendirmelerini ve uygulama geliştirmelerini zorlaştırıyor. uyarlayabilirsiniz.
  • IdP açısından bakıldığında, otomatik bir modelin performans değerlendirmesi için yeniden kimlik doğrulama gerçekleştirildi veya gerçekleşmedi. Ayrıca, açık bir kullanıcı uyumlulaştırmasının dahil olup olmaması, güvenlikle ilgili özellikler. Örneğin, bazı kullanıcılar daha yüksek bir bütçe kimlik doğrulamada açık kullanıcı uyumlulaştırması gerektiren güvenlik katmanı. Bir IdP bu tür uyumlulaştırma olmadan bir jeton isteği alır, farklı bir şekilde talep edebilirsiniz. Örneğin, RP'nin mediation: required ile FedCM API'yi tekrar çağırın.

Bu nedenle, otomatik yeniden kimlik doğrulama akışının görünürlüğünü sağlamak geliştiricilerin yararına.

Auto-selected Flag API ile Chrome, uygunsuz bir kullanıcı izninin alınıp alınmadığını Otomatik olarak yeniden kimlik doğrulama yapıldığında hem IdP hem de RP ile Farklı devam et düğmesi veya açık bir uyumlulaştırma gerçekleşmiştir. Paylaşım yalnızca kullanıcı, IdP/RP iletişimi için izin verildiğinden emin olun.

IdP paylaşımı

Chrome, bilgileri IdP sonrası kullanıcı izniyle paylaşmak için POST isteğindeki is_auto_selected=true id_assertion_endpoint:

POST /fedcm_assertion_endpoint HTTP/1.1
Host: idp.example
Origin: https://rp.example/
Content-Type: application/x-www-form-urlencoded
Cookie: 0x23223
Sec-Fetch-Dest: webidentity

account_id=123&client_id=client1234&nonce=Ct0D&disclosure_text_shown=true&is_auto_selected=true

Kısıtlanmış taraf paylaşımı

Tarayıcı, bilgileri isAutoSelected üzerinden kısıtlanmış taraf ile şu şekilde paylaşabilir: IdentityCredential:

const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/manifest.json',
      clientId: '1234'
    }]
  }
});

if (cred.isAutoSelected !== undefined) {
  const isAutoSelected = cred.isAutoSelected;
}

Etkileşimde bulunun ve geri bildirim paylaşın

Test sırasında geri bildiriminiz varsa veya herhangi bir sorunla karşılaşırsanız bunları paylaşabilirsiniz ile crbug.com.

Fotoğraf: Girl kırmızı şapkalı Unsplash