Güvenen taraf tarafında FedCM ile kimlik çözümü uygulama

Güvenen tarafların (RP'ler), sitelerinde FedCM'yi etkinleştirmek için aşağıdaki adımları tamamlaması gerekir:

Relying Party'de FedCM API'yi çağırma

IdP'nin yapılandırması ve uç noktaları kullanılabilir olduğunda RP'ler, bir kullanıcının IdP ile RP'de oturum açmasına izin verilmesini istemek için navigator.credentials.get() işlevini çağırabilir.

API'yi çağırmadan önce FedCM'nin kullanıcının tarayıcısında kullanılabilir olduğunu onaylamanız gerekir. FedCM'nin kullanılabilir olup olmadığını kontrol etmek için FedCM uygulamanızın etrafına şu kodu ekleyin:

  if ('IdentityCredential' in window) {
    // If the feature is available, take action
  } else {
    // FedCM is not supported, use a different identity solution
  }

Bir kullanıcının FedCM kullanarak bir RP'de IdP'de oturum açmasına izin vermek için RP, navigator.credentials.get() işlevini çağırabilir. Chrome 136'dan itibaren RP, tek bir navigator.credentials.get() çağrısında birden fazla kimlik sağlayıcı dizisi belirterek birden fazla IdP'yi destekleyebilir. Örneğin:

  const credential = await navigator.credentials.get({
      identity: {
        // Specify the IdP (or multiple IdPs, supported from Chrome 136) this Relying Party supports
        providers: [
        {
              configURL: 'https://accounts.idp-1.example/config.json',
              clientId: '********'
        },
        {
          configURL: 'https://accounts.idp-2.example/config.json',
          clientId: '********'
        }]
      }
    },
  );
  const { token } = credential;
  
  // Get the current IdP's configURL to identify which provider the user is signed in with
  const currentIdpConfigUrl = credential.configURL;
  if (currentIdpConfigUrl === 'https://idp1.example/foo.json') {
    // handle the case where the user signed in with idp1
  } else if (currentIdpConfigUrl === 'https://idp2.example/bar.json') {
    // handle the case where the user signed in with idp2
    }

IdP1 ve IdP2 ile oturum açarak birden fazla IdP özelliğini deneyin.

Bağlam özelliği

İsteğe bağlı context özelliğiyle RP, FedCM iletişim kutusu kullanıcı arayüzündeki dizeyi (ör. "rp.example ile oturum açın…", "idp.example kullanın…") önceden tanımlanmış kimlik doğrulama bağlamlarına uyacak şekilde değiştirebilir. context özelliği aşağıdaki değerleri içerebilir:

  • signin (varsayılan)
  • signup
  • use
FedCM iletişim kutusunun kullanıcı arayüzü bileşenlerini açıklayan şema: Sol üst tarafta bir simge gösteriliyor. Simgenin sağında, "IdP ile RP'de oturum açın" mesajını gösteren bir bağlam bileşeni bulunur. En altta, özel metin ve arka plan rengine sahip bir "Devam" düğmesi bulunur.
Markalama, FedCM iletişim kutusuna nasıl uygulanır?

Örneğin, context değerini use olarak ayarladığınızda aşağıdaki mesaj gösterilir:

Özelleştirilmiş bir bağlam mesajı gösteren FedCM iletişim kutusu: Bağlam mesajında, FedCM ile "Oturum aç" yerine FedCM'yi "Kullan" ifadesi yer alıyor.
Özelleştirilmiş bir bağlam mesajı gösteren FedCM iletişim kutusu.

Tarayıcı, hesap listesi uç noktasından gelen yanıtta approved_clients olup olmamasına bağlı olarak kayıt ve oturum açma kullanım alanlarını farklı şekilde ele alır. Kullanıcı RP'ye zaten kaydolduysa tarayıcı ".... ile devam etmek için" şeklinde bir açıklama metni göstermez.
providers özelliği, aşağıdaki özelliklere sahip bir IdentityProvider nesneleri dizisi alır:

Sağlayıcılar mülkü

providers özelliği, aşağıdaki özelliklere sahip IdentityProvider nesnelerden oluşan bir dizi alır:

Mülk Açıklama
configURL (zorunlu) IdP yapılandırma dosyasının tam yolu.
clientId (zorunlu) IdP tarafından verilen RP'nin istemci tanımlayıcısı.
loginHint (isteğe bağlı) Hesap uç noktaları tarafından sağlanan login_hints değerlerinden birini belirterek FedCM iletişim kutusunda belirtilen hesap seçici olarak gösterilir.
domainHint (isteğe bağlı) Hesap uç noktaları tarafından sağlanan domain_hints değerlerinden birini belirterek FedCM iletişim kutusunda belirtilen hesap seçici olarak gösterilir.
mode (isteğe bağlı) FedCM'nin kullanıcı arayüzü modunu belirten dize. Aşağıdaki değerlerden birini alabilir:
  • "active": FedCM istemi, kullanıcı etkileşimiyle (ör. bir düğmeyi tıklayarak) başlatılmalıdır.
  • "passive": FedCM istemi, doğrudan kullanıcı etkileşimi olmadan başlatılır.
Etkin ve pasif mod arasındaki fark hakkında daha fazla bilgi edinmek için genel bakış sayfasına göz atın.

Not: mode parametresi Chrome 132'den itibaren desteklenir.
fields (isteğe bağlı) RP'nin IdP'nin kendisiyle paylaşmasını istediği kullanıcı bilgilerini belirten dizeler dizisi. Aşağıdaki alanlar isteğe bağlı olarak belirtilebilir:
  • "name"
  • "username"
  • "email"
  • "tel"
  • "picture"
Not: Fields API, Chrome 132 ve sonraki sürümlerde desteklenir. "username" ve "tel" alanları Chrome 141'den itibaren desteklenir.
params (isteğe bağlı) Ek anahtar/değer parametrelerinin belirtilmesine olanak tanıyan özel nesne:
  • scope: RP'nin istemesi gereken ek izinleri içeren bir dize değeri (ör. "drive.readonly calendar.readonly")
  • nonce: Yanıtın bu belirli istek için verildiğinden emin olmak üzere kullanılan rastgele bir dize. Tekrar oynama saldırılarını önler.
  • Diğer özel anahtar/değer çifti parametreleri.

Not: params, Chrome 132'den itibaren desteklenir.

Etkin mod

FedCM, farklı kullanıcı deneyimi modu yapılandırmalarını destekler. Pasif mod varsayılan moddur ve geliştiricilerin bu modu yapılandırması gerekmez.

FedCM'yi etkin modda kullanmak için:

  1. Kullanıcının tarayıcısında özelliğin kullanılabilirliğini kontrol edin.
  2. API'yi geçici bir kullanıcı hareketiyle (ör. düğme tıklama) çağırın.
  3. mode parametresini API çağrısına iletin:
  let supportsFedCmMode = false;
  try {
    navigator.credentials.get({
      identity: Object.defineProperty(
        // Check if this Chrome version supports the Mode API.
        {}, 'mode', {
          get: function () { supportsFedCmMode = true; }
        }
      )
    });
  } catch(e) {}

  if (supportsFedCmMode) {
    // The button mode is supported. Call the API with mode property:
    return await navigator.credentials.get({
      identity: {
        providers: [{
          configURL: 'https://idp.example/config.json',
          clientId: '123',
        }],
        // The 'mode' value defines the UX mode of FedCM.
        // - 'active': Must be initiated by user interaction (e.g., clicking a button).
        // - 'passive': Can be initiated without direct user interaction.
        mode: 'active'
      }
    });
  }

Etkin modu bu demo ile deneyin.

Etkin modda özel simge

Etkin mod, IdP'lerin RP'nin resmi logo simgesini doğrudan istemci meta veri uç noktası yanıtına eklemesine olanak tanır. RP, markalama verilerini önceden sağlamalıdır.

Kaynaklar arası iframe'den FedCM'yi çağırma

Üst çerçeve izin veriyorsa FedCM, identity-credentials-get izin politikası kullanılarak kaynaklar arası bir iFrame'den çağrılabilir. Bunu yapmak için allow="identity-credentials-get" özelliğini iFrame etiketine aşağıdaki gibi ekleyin:

  <iframe src="https://fedcm-cross-origin-iframe.glitch.me" allow="identity-credentials-get"></iframe>

Bu özelliğin nasıl çalıştığını örnekte görebilirsiniz.

İsteğe bağlı olarak, üst çerçeve kaynakların FedCM'yi çağırmasını kısıtlamak istiyorsa izin verilen kaynakların listesini içeren bir Permissions-Policy üstbilgisi gönderin.

  Permissions-Policy: identity-credentials-get=(self "https://fedcm-cross-origin-iframe.glitch.me")

İzin politikası hakkında daha fazla bilgiyi İzin politikasıyla tarayıcı özelliklerini kontrol etme başlıklı makalede bulabilirsiniz.

Login Hint API

Giriş ipucunu kullanarak RP, kullanıcının hangi hesapla oturum açması gerektiğini önerebilir. Bu, daha önce hangi hesabı kullandığından emin olmayan kullanıcıların yeniden kimlik doğrulaması yapmasına yardımcı olabilir.

RP'ler, aşağıdaki kod örneğinde gösterildiği gibi navigator.credentials.get() işlevini hesap listesi uç noktasından getirilen login_hints değerlerinden biriyle loginHint özelliğiyle birlikte çağırarak belirli bir hesabı seçerek gösterebilir:

  return await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/manifest.json',
        clientId: '123',
        // Accounts endpoint can specify a 'login_hints' array for an account.
        // When RP specifies a 'exampleHint' value, only those accounts will be
        // shown to the user whose 'login_hints' array contains the 'exampleHint'
        // value
        loginHint : 'exampleHint'
      }]
    }
  });

loginHint 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'siyle bir pop-up pencere açılır. Bağlantıya daha sonra giriş ipucu ve alan adı ipucu sorgu parametreleri eklenir.

Domain Hint API

RP'ler, yalnızca belirli bir alanla ilişkili hesapları seçerek gösterebilir. Bu, kurumsal alanla sınırlı olan RP'ler için yararlı olabilir.

RP, yalnızca belirli alan hesabı verilerini göstermek için aşağıdaki kod örneğinde gösterildiği gibi navigator.credentials.get() işlevini hesap listesi uç noktasından alınan domain_hints değerlerinden biriyle domainHint özelliğiyle birlikte çağırmalıdır:

  return await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/manifest.json',
        clientId: 'abc',
        // Accounts endpoint can specify a 'domain_hints' array for an account.
        // When RP specifies a '@domain.example' value, only those accounts will be
        // shown to the user whose 'domain_hints' array contains the
        // '@domain.example' value
        domainHint : '@domain.example'
      }]
    }
  });

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'siyle bir pop-up pencere açılır. Bağlantıya daha sonra giriş ipucu ve alan adı ipucu sorgu parametreleri eklenir.

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

Daha ayrıntılı bilgi için demoyu inceleyin.

Özel parametreler

Özel Parametreler özelliği, RP'nin kimlik onaylama uç noktasına ek anahtar/değer parametreleri sağlamasına olanak tanır. RP'ler, Parametreler API'si ile temel oturum açma işleminin ötesindeki kaynaklar için izin istemek üzere IdP'ye ek parametreler iletebilir. Ek parametreler iletmek şu senaryolarda faydalı olabilir:

  • RP'nin, IdP'nin sahip olduğu ek izinleri (ör. fatura adresi veya takvim erişimi) dinamik olarak istemesi gerekir. Kullanıcı, Devam et özelliği kullanılarak başlatılan, IdP kontrollü bir kullanıcı deneyimi akışı üzerinden bu izinleri yetkilendirebilir. Ardından IdP, bu bilgileri paylaşır.

API'yi kullanmak için RP, params çağrısında navigator.credentials.get() özelliğine parametreler ekler:

  let {token} = await navigator.credentials.get({
    identity: {
      providers: [{
        clientId: '1234',
        configURL: 'https://idp.example/fedcm.json',
        // Key/value pairs that need to be passed from the
        // RP to the IdP but that don't really play any role with
        // the browser.
        params: {
          IDP_SPECIFIC_PARAM: '1',
          foo: 'BAR'
        }
      },
    }
  });

Tarayıcı, bunu otomatik olarak tek bir URL kodlamalı JSON serileştirilmiş nesne olarak parametrelerle birlikte IdP'ye yönelik bir POST isteğine çevirir:

  // The assertion endpoint is drawn from the config file
  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

  // params are translated into urlencoded version of `{"IDP_SPECIFIC_PARAM":"1","foo":"bar"}`
  account_id=123&client_id=client1234&params=%22%7B%5C%22IDP_SPECIFIC_PARAM%5C%22%3A1%2C%5C%22foo%5C%22%3A%5C%22BAR%5C%22%7D%22.

RP'nin ek izinlere ihtiyacı varsa IdP bir yönlendirme bağlantısı sağlayabilir. Örneğin, node.js'de:

  if (rpRequestsPermissions) {
    // Response with a URL if the RP requests additional permissions
    return res.json({
      continue_on: '/example-redirect',
    });
  }

Alanlar

RP, IdP'nin kendisiyle paylaşmasını istediği kullanıcı bilgilerini belirtebilir. Ad, e-posta adresi, kullanıcı adı, telefon numarası ve profil resmi kombinasyonları bu kapsamdadır. İstenen bilgiler, FedCM iletişim kutusunun açıklama kullanıcı arayüzüne eklenir.

Kaydolan kullanıcılar, kaydolmayı seçmeleri durumunda idp.example tarafından istenen bilgilerin rp.example ile paylaşılacağını belirten bir mesaj görür. Hesaplar uç noktasından gelen yanıtta RP'nin istediği bir alan yoksa açıklama metninde bu alan yer almaz. IdP, kimlik onaylama uç noktasından istenen tüm alanları öğrenir ve devam etmek için daha fazla kullanıcı izni alıp almaması gerektiğine karar verir.

Aşağıdaki açıklama kullanıcı arayüzü metnini içeren FedCM iletişim kutusu: &quot;Devam etmek için fedcm-idp-demo.localhost, kullanıcı adınızı ve telefon numaranızı bu siteyle paylaşacak.&quot;
Açıklama mesajı: RP, IdP'den yalnızca kullanıcı adını ve telefon numarasını paylaşmasını ister.

Alanlar özelliğini kullanmak için RP, navigator.credentials.get() çağrısına bir fields dizisi eklemelidir. Alanlar name, email, tel, username veya picture gibi özellikleri içerebilir. Bu özellik gelecekte daha fazla değeri içerecek şekilde genişletilebilir. fields içeren bir istek aşağıdaki gibi görünür:

   let { token } = await navigator.credentials.get({
    identity: {
      providers: [{
        // RP requests the IdP to share only username and profile picture
        fields: [ 'username', 'picture'],
        clientId: '1234',
        configURL: 'https://idp.example/fedcm.json',
      },
    }
  });

Tarayıcı, bunu otomatik olarak kimlik onaylama uç noktasına yönelik bir HTTP isteğine dönüştürür. Bu istek, RP tarafından belirtilen fields parametresini ve tarayıcının kullanıcıya disclosure_shown_for parametresinde açıkladığı alanları içerir. Tarayıcı, geriye dönük uyumluluk için, açıklama metni gösterildiyse ve istenen alanlar üç alanın tamamını ('name', 'email' ve 'picture') içeriyorsa disclosure_text_shown=true değerini de gönderir. Chrome 141'den itibaren disclosure_text_shown değeri, açıklama metninin kullanıcıya gerçekten gösterilip gösterilmediğini belirtmez.

  POST /id_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

  // The RP only requested to share email and picture. The browser will send `disclosure_text_shown=false`, as the 'name' field value is missing
  account_id=123&client_id=client1234&disclosure_text_shown=false&fields=email,picture&disclosure_shown_for=email,picture

fields boş bir dizi ise kullanıcı aracısı açıklama kullanıcı arayüzünü atlar.

Bilgilendirme kullanıcı arayüzü mesajı göstermeyen bir FedCM pasif modu iletişim kutusu.
Açıklama mesajı pasif modda gösterilmez. Düğme akışında, açıklama kullanıcı arayüzü tamamen atlanır.

Bu durum, accounts uç noktasından gelen yanıtta approved_clients içindeki RP ile eşleşen bir istemci kimliği olmasa bile geçerlidir.

Bu durumda, kimlik onaylama uç noktasına gönderilen disclosure_text_shown, HTTP gövdesinde yanlış olur:

  POST /id_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=234234&disclosure_text_shown=false

Hata mesajı gösterme

Bazen IdP, istemcinin yetkisiz olması veya sunucunun geçici olarak kullanılamaması gibi geçerli nedenlerle jeton veremeyebilir. IdP "error" yanıtı döndürürse RP bunu yakalayabilir ve Chrome, IdP tarafından sağlanan hata bilgilerini içeren tarayıcı kullanıcı arayüzünü göstererek kullanıcıyı bilgilendirebilir.

Kullanıcının oturum açma girişimi başarısız olduktan sonra hata mesajını gösteren bir 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 sonra hata mesajını gösteren bir FedCM iletişim kutusu. Dize, hata türüyle ilişkilidir.
  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;
  }

İlk kimlik doğrulamadan sonra kullanıcıların kimliklerini otomatik olarak yeniden doğrulama

FedCM otomatik yeniden kimlik doğrulama ("auto-reauthn" olarak kısaltılır) kullanıcıların otomatik olarak yeniden kimlik doğrulamasına olanak tanıyabilir. Kullanıcının otomatik olarak yeniden kimlik doğrulaması için aşağıdaki koşulların karşılanması gerekir:

  • Kullanıcı daha önce FedCM kullanarak ilk kimlik doğrulama işlemini gerçekleştirmiştir. Buradaki "ilk kimlik doğrulama", kullanıcının bir hesap oluşturduğu veya aynı tarayıcı örneğinde ilk kez FedCM'nin oturum açma iletişim kutusundaki "Devam et..." düğmesine dokunarak RP'nin web sitesinde oturum açtığı anlamına gelir.
  • Kullanıcının yalnızca bir geri dönen hesabı varsa Birden fazla IdP için geri dönen hesaplar varsa kullanıcının kimliği otomatik olarak yeniden doğrulanmaz.

Açık kullanıcı deneyimi, kullanıcının izlemeyi önlemek için federasyon hesabı oluşturmasından önce (FedCM'nin temel amaçlarından biri) mantıklı olsa da kullanıcı bunu bir kez yaptıktan sonra gereksiz yere zahmetli hale gelir: Kullanıcı, RP ile IdP arasındaki iletişime izin verdikten sonra, daha önce onayladığı bir şey için başka bir açık kullanıcı onayı zorunlu kılmanın gizlilik veya güvenlik açısından bir faydası yoktur.

Otomatik yeniden kimlik doğrulama ile tarayıcı, navigator.credentials.get() çağrılırken mediation için belirttiğiniz seçeneğe bağlı olarak davranışını değiştirir.

  const cred = await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/fedcm.json',
        clientId: '1234',
      }],
    },
    mediation: 'optional', // this is the default
  });

  // `isAutoSelected` is `true` if auto-reauthn was performed.
  const isAutoSelected = cred.isAutoSelected;

mediation, Credential Management API'deki bir özelliktir. Aynı şekilde çalışır. PasswordCredential ve FederatedCredential için de geçerlidir. Ayrıca PublicKeyCredential tarafından da kısmen desteklenir. Mülk aşağıdaki dört değeri kabul eder:

  • 'optional'(varsayılan): Mümkünse otomatik olarak yeniden kimlik doğrulama yapılır, mümkün değilse aracılık gerekir. Oturum açma sayfasında bu seçeneği belirlemenizi öneririz.
  • 'required': Devam etmek için her zaman arabuluculuk gerektirir. Örneğin, kullanıcı arayüzünde "Devam et" düğmesini tıklamak. Kullanıcılarınızın her kimlik doğrulama gerektiğinde açıkça izin vermesi bekleniyorsa bu seçeneği belirleyin.
  • 'silent': Mümkünse otomatik olarak yeniden kimlik doğrulama, mümkün değilse uyumlulaştırma gerektirmeden sessizce başarısız olma. Bu seçeneği, özel oturum açma sayfası dışındaki sayfalarda ancak kullanıcıların oturumunu açık tutmak istediğiniz yerlerde (ör. bir kargo web sitesindeki ürün sayfası veya bir haber web sitesindeki makale sayfası) kullanmanızı öneririz.
  • 'conditional': WebAuthn için kullanılır ve şu anda FedCM için kullanılamaz.

Bu görüşmede, otomatik yeniden kimlik doğrulama aşağıdaki koşullarda gerçekleşir:

  • FedCM kullanılabilir. Örneğin, kullanıcı FedCM'yi genel olarak veya ayarlarda RP için devre dışı bırakmamıştır.
  • Kullanıcı, bu tarayıcıda web sitesinde oturum açmak için FedCM API ile yalnızca bir hesap kullandı.
  • Kullanıcı, bu hesapla IdP'de oturum açmış olmalıdır.
  • Son 10 dakika içinde otomatik yeniden kimlik doğrulama gerçekleşmedi.
  • RP, önceki oturum açma işleminden sonra navigator.credentials.preventSilentAccess() işlemini yapmadı.

Bu koşullar karşılandığında, FedCM navigator.credentials.get() çağrılır çağrılmaz kullanıcıyı otomatik olarak yeniden doğrulama girişimi başlatılır.

mediation: optional olduğunda, yalnızca tarayıcının bildiği nedenlerden dolayı otomatik yeniden kimlik doğrulama kullanılamayabilir. RP, isAutoSelected özelliğini inceleyerek otomatik yeniden kimlik doğrulamanın yapılıp yapılmadığını kontrol edebilir.

Bu, API performansını değerlendirmek ve kullanıcı deneyimini buna göre iyileştirmek için faydalıdır. Ayrıca, kullanılamadığında kullanıcıdan mediation: required ile bir akış olan açık kullanıcı aracılığıyla oturum açması istenebilir.

Kullanıcı, FedCM aracılığıyla otomatik olarak yeniden kimlik doğruluyor.

preventSilentAccess() ile uyumlulaştırmayı zorunlu kılma

Kullanıcıların oturumlarını kapattıktan hemen sonra otomatik olarak yeniden kimlik doğrulaması yapılması, iyi bir kullanıcı deneyimi sağlamaz. Bu nedenle, FedCM'de bu davranışı önlemek için otomatik yeniden kimlik doğrulamanın ardından 10 dakikalık bir sessiz dönem vardır. Bu, kullanıcı 10 dakika içinde tekrar oturum açmadığı sürece otomatik yeniden kimlik doğrulamanın en fazla 10 dakikada bir gerçekleşeceği anlamına gelir. RP, kullanıcının RP'den açıkça çıkış yapması (ör. çıkış yap düğmesini tıklaması) durumunda tarayıcıdan otomatik yeniden kimlik doğrulamanın devre dışı bırakılmasını açıkça istemek için navigator.credentials.preventSilentAccess() işlevini çağırmalıdır.

  function signout() {
    navigator.credentials.preventSilentAccess();
    location.href = '/signout';
  }

Kullanıcılar, ayarlardan otomatik yeniden kimlik doğrulamayı devre dışı bırakabilir.

Kullanıcılar, ayarlar menüsünden otomatik yeniden kimlik doğrulamayı devre dışı bırakabilir:

  • Masaüstü Chrome'da chrome://password-manager/settings > Otomatik olarak oturum aç'a gidin.
  • Android Chrome'da Ayarlar > Şifre Yöneticisi'ni açın > Sağ üst köşedeki dişli simgesine > Otomatik oturum açma'ya dokunun.

Kullanıcı, açma/kapatma düğmesini devre dışı bırakarak otomatik yeniden kimlik doğrulama davranışını tamamen devre dışı bırakabilir. Bu ayar, kullanıcı Chrome örneğinde bir Google Hesabı'nda oturum açtıysa ve senkronizasyon etkinse cihazlar arasında depolanır ve senkronize edilir.

IdP'nin RP ile bağlantısını kesme

Bir kullanıcı daha önce FedCM aracılığıyla IdP'yi kullanarak RP'de oturum açtıysa ilişki, tarayıcı tarafından yerel olarak bağlı hesaplar listesi şeklinde hatırlanır. RP, IdentityCredential.disconnect() işlevini çağırarak bağlantıyı kesebilir. Bu işlev, üst düzey bir RP çerçevesinden çağrılabilir. RP'nin, IdP'nin bağlantısının kesilmesi için configURL, IdP altında kullandığı clientId ve bir accountHint iletmesi gerekir. Hesap ipucu, bağlantıyı kaldırma 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şmesi gerekmeyen 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(), Promise döndürüyor. Bu söz, aşağıdaki nedenlerle istisna oluşturabilir:

  • Kullanıcı, FedCM aracılığıyla IdP'yi kullanarak RP'de oturum açmamıştır.
  • API, FedCM izin politikası olmadan bir iFrame'den çağrılıyor.
  • configURL geçersiz veya bağlantıyı kesme uç noktası eksik.
  • İçerik Güvenliği Politikası (İGP) kontrolü başarısız oluyor.
  • Bekleyen bir bağlantıyı kaldırma isteği var.
  • Kullanıcı, tarayıcı ayarlarında FedCM'yi devre dışı bırakmıştır.

IdP'nin bağlantıyı kesme uç noktası bir yanıt döndürdüğünde, RP ve IdP'nin tarayıcıdaki bağlantısı kesilir ve söz yerine getirilir. Bağlantısı kesilen hesapların kimlikleri, bağlantı kesme uç noktasından gelen yanıtta belirtilir.

Sonraki adımlar

Kimlik çözümünüzü kimlik sağlayıcı tarafında FedCM ile nasıl uygulayacağınızı inceleyin.
Kullanıcıların ve geliştiricilerin, platformlar ve siteler arasında FedCM katılımını etkinleştirme veya devre dışı bırakma dahil olmak üzere nasıl yönetebileceğini keşfedin.