Kimlik bilgilerinizi kimlik bilgisi sağlayıcılarla tutarlı tutma

Bir kullanıcı geçiş anahtarı oluşturduğunda bağlı taraf sunucusu belirli ayrıntıları, kimlik bilgisi sağlayıcı (ör. Google Şifre Yöneticisi) ise diğer ayrıntıları kaydeder. Özellikle:

  • Güvenen taraf sunucusu, ortak anahtar kimlik bilgisini kaydeder.
  • Kimlik bilgisi sağlayıcı, kullanıcı adını, görünen adı, özel anahtarı ve diğer ilişkili meta verileri kaydeder. Bu meta veriler, kullanıcıların oturum açma sırasında gerekli geçiş anahtarını tanımlayıp seçmesine yardımcı olur.

Güvenen taraf sunucusuna kaydedilen veriler ile kimlik bilgisi sağlayıcı arasındaki olası tutarsızlıklar, kötü kullanıcı deneyimlerine yol açabilir. Aşağıdaki senaryolarda sorunlar ortaya çıkabilir:

  • Kimlik bilgisi, güvenen taraf sunucusunda silinir ancak kimlik bilgisi sağlayıcısında silinmez. Bu durumda, kimlik bilgisi sağlayıcı, silinen kimlik bilgisini kullanıcıya gösterir.
  • Güvenen taraf sunucusunda kullanıcı adı veya görünen ad güncellenir ancak kimlik bilgisi sağlayıcıda güncellenmez. Bu durum, kimlik bilgisi sağlayıcının güncel olmayan ayrıntıları göstermesine neden olur.

Kimlik Bilgisi Yöneticisi'nin Signal API'si, kimlik bilgisi sağlayıcıların kimlik bilgilerini silmek ve kullanıcı meta verilerini (ör. kullanıcı adı ve görünen ad) güncellemek için güvenen taraflarla iletişim kurmasına olanak tanır. Farklı senaryolar için desteklenen üç istek türü vardır:

  • SignalUnknownCredentialRequest

    • Belirli bir kimlik bilgisinin artık geçerli olmadığını ve kimlik bilgisi sağlayıcıdan gizlenmesi veya kaldırılması gerektiğini gösterir.
  • SignalAllAcceptedCredentialIdsRequest

    • Kimlik bilgisi sağlayıcıya kabul edilen kimlik bilgisi kimliklerinin listesini sağlar.
  • SignalCurrentUserDetailsRequest

    • Kullanıcının meta veri ayrıntılarını günceller.

Sürüm uyumluluğu

Signal API, Android 15 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir ve androidx.credentials kitaplığının 1.6.0-beta03 sürümünden itibaren kullanılabilir.

Uygulama

Sinyal API'sini kullanmak için aşağıdaki adımları uygulayın:

  1. Projenize Credential Manager bağımlılığını ekleyin.

    Kotlin

    dependencies {
        implementation("androidx.credentials:credentials:1.6.0-rc01")
    }

    Groovy

    dependencies {
        implementation "androidx.credentials:credentials:1.6.0-rc01"
    }

  2. Signal API'yi çağırma

    Kimlik bilgisi sağlayıcıya sinyal isteği göndermek için desteklenen bir sinyal isteği kullanın. Aşağıdaki örneklerde gösterildiği gibi, sinyal isteği türlerinin her biri için bir JSON isteği gerekir:

    • Bilinmeyen kimlik bilgisi (SignalUnknownCredentialRequest)

      Bir kimlik bilgisinin reddedildiğini ve bilinmiyor olarak kabul edildiğini belirtmek için SignalUnknownCredentialRequest simgesini kullanın. Kimlik bilgisi sağlayıcı bu sinyali aldığında kimlik bilgisini gizler veya siler.

      Kullanım

      Güvenen taraf, geçiş anahtarı onayını doğrulayamadığında bu sinyali kullanın. Bu, geçiş anahtarının geçersiz olduğu ve kimlik bilgisi sağlayıcı tarafından gizlenmesi veya kaldırılması gerektiği anlamına gelir.

      Bu istek için gerekli JSON parametreleri rpId ve credentialId'dir. JSON yapısı hakkında daha fazla bilgi için signalUnknownCredential seçenekleri başlıklı makaleyi inceleyin.

      credentialManager.signalCredentialState(
          SignalUnknownCredentialRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */)
              }.toString()
          )
      )
      
    • Kabul edilen tüm kimlik bilgileri (SignalAllAcceptedCredentialIdsRequest)

      Kabul edilen tüm kimlik bilgilerini kullanarak kimlik bilgisi sağlayıcıları bilgilendirmek için SignalAllAcceptedCredentialIdsRequest simgesini kullanın. Sinyal, kimlik bilgisi sağlayıcı tarafından alındıktan sonra kimlik bilgisi sağlayıcı, bu listede yer almayan tüm kimlik bilgilerini gizler veya siler ya da listede yer alan daha önce gizlenmiş kimlik bilgilerinin gizliliğini kaldırır.

      Kullanım

      Geçiş anahtarı doğrulaması güvenen taraf tarafından başarısız olduğunda bu sinyali kullanın. Bu hata, geçiş anahtarının geçersiz olduğu ve kimlik bilgisi sağlayıcı tarafından gizlenmesi veya kaldırılması gerektiği anlamına gelir. Bu sinyali, bilinen kimlik bilgisi kimliklerinin kümesini kimlik bilgisi sağlayıcılara yayınlamanız gerektiğinde de kullanabilirsiniz.

      Bu istek için gerekli JSON parametreleri rpId, userId ve allAcceptedCredentialIds'dir. JSON yapısı hakkında daha fazla bilgi için signalAllAcceptedCredential seçenekleri başlıklı makaleyi inceleyin.

      credentialManager.signalCredentialState(
          SignalAllAcceptedCredentialIdsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put(
                      "allAcceptedCredentialIds",
                      JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */)
                  )
              }.toString()
          )
      )
      
    • Mevcut kullanıcı ayrıntıları (SignalCurrentUserDetailsRequest)

      SignalCurrentUserDetailsRequest kullanarak kimlik bilgisi sağlayıcıları, belirli bir kullanıcının kullanıcı adı ve görünen adı gibi meta verilerin güncellendiği ve kimlik bilgisi sağlayıcıda görünmesi gerektiği konusunda bilgilendirin.

      Kullanım

      Kullanıcı veya güvenen taraf, kullanıcı hesabıyla ilişkili geçiş anahtarı meta verilerini güncellediğinde bu sinyali kullanın.

      Bu istek için gerekli JSON parametreleri rpId, userId, name ve displayName'dir. JSON yapısı hakkında daha fazla bilgi için signalCurrentUserDetails seçenekleri başlıklı makaleyi inceleyin.

      credentialManager.signalCredentialState(
          SignalCurrentUserDetailsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put("name", name /* [String] New Name to be updated for the current user */)
                  put("displayName", displayName /* [String] New display name to be updated for the current user */)
              }.toString()
          )
      )
      

Uygulamayı test etme

Sinyal API'si uygulamanızı test etmek için aşağıdaki adımları tamamlayın:

  1. MyVault adlı kimlik bilgisi sağlayıcı örneğini yükleyin.

  2. Ayarlar > Şifreler, Geçiş Anahtarları ve Hesaplar > Tercih Edilen Hizmet bölümünde MyVault'u kimlik bilgisi sağlayıcı olarak etkinleştirin.

    Android ayarlarındaki Tercih Edilen Hizmet menüsünde, MyVault&#39;un kimlik bilgisi sağlayıcı olarak etkinleştirildiği gösteriliyor.

  3. Ayarlar > Uygulamalar > MyVault > Bildirimler'e giderek MyVault için tüm bildirimleri etkinleştirin.

    MyVault uygulamasının Bildirimler menüsünde, etkinleştirilmiş tüm bildirimler gösteriliyor.

  4. Ayarlar > Uygulamalar > MyVault > Bildirimler > Kategoriler > Signal API Bildirim Kanalı bölümünde bildirimler için Ekranda göster seçeneğinin açık olduğunu doğrulayın.

    MyVault için Signal API bildirim kanalı ayarları. &quot;Ekranda göster&quot; seçeneği etkinleştirilmiş.

  5. Uygulamanızda, kimlik bilgisi sağlayıcıya sinyal istekleri gönderen akışları tetikleyin. Ekranda MyVault'tan gelen bildirimleri görmeniz gerekir. Bu, kimlik bilgisi sağlayıcının istekleri aldığını doğrular.