Bu sayfada, geri yükleme anahtarının nasıl oluşturulacağı, geri yükleme anahtarıyla nasıl oturum açılacağı ve geri yükleme anahtarının nasıl silineceği açıklanmaktadır.
Android becerileri
GitHub'da gösterKimlik bilgilerini geri yükleme
android skills add restore-credentialsSürüm uyumluluğu
Kimlik Bilgisi Yöneticisi'nin Kimlik Bilgilerini Geri Yükleme özelliği, Android 9 (API düzeyi 28) ve sonraki sürümleri, Google Play Hizmetleri (GMS) temel sürüm 24220000 veya sonraki sürümleri ve androidx.credentials kitaplığının 1.5.0 veya sonraki sürümlerini çalıştıran cihazlarda kullanılabilir.
Ön koşullar
Geçiş anahtarları sunucusuna benzer bir bağlı taraf sunucusu oluşturun. Geçiş anahtarlarıyla kimlik doğrulamayı işlemek için ayarlanmış bir sunucunuz varsa yedek anahtarlar için aynı sunucu tarafı uygulamasını kullanın.
Bağımlılıklar
Uygulama modülünüzün build.gradle dosyasına aşağıdaki bağımlılıkları ekleyin:
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") implementation("androidx.credentials:credentials-play-services-auth:1.7.0-alpha02") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" implementation "androidx.credentials:credentials-play-services-auth:1.7.0-alpha02" }
Kimlik Bilgilerini Geri Yükleme özelliği, androidx.credentials kitaplığının 1.5.0 ve sonraki sürümlerinde kullanılabilir. Ancak mümkün olduğunda bağımlılıkların en son kararlı sürümlerini kullanmanız önerilir.
Genel Bakış
- Geri yükleme anahtarı oluşturma: Geri yükleme anahtarı oluşturmak için aşağıdaki adımları tamamlayın:
- Kimlik Bilgisi Yöneticisi'ni örneklendirme:
CredentialManagernesnesi oluşturun. - Uygulama sunucusundan kimlik bilgisi oluşturma seçeneklerini alma: İstemci uygulamasına, uygulama sunucunuzdan geri yükleme anahtarını oluşturmak için gereken bilgileri gönderin.
- Geri yükleme anahtarı oluşturma: Kullanıcı uygulamanızda oturum açtıysa kullanıcının hesabı için geri yükleme anahtarı oluşturun.
- Kimlik bilgisi oluşturma yanıtını işleme: Kimlik bilgilerini istemci uygulamanızdan uygulama sunucunuza göndererek işleyin ve istisnaları ele alın.
- Kimlik Bilgisi Yöneticisi'ni örneklendirme:
- Geri yükleme anahtarıyla oturum açma: Geri yükleme anahtarıyla oturum açmak için aşağıdaki adımları uygulayın:
- Uygulama sunucusundan kimlik bilgisi alma seçeneklerini alma: İstemci uygulamasına, uygulama sunucunuzdan geri yükleme anahtarını almak için gereken bilgileri gönderin.
- Geri yükleme anahtarını alma: Kullanıcı yeni bir cihaz kurduğunda Kimlik Bilgisi Yöneticisi'nden geri yükleme anahtarını isteyin. Bu sayede kullanıcı, ek giriş yapmadan oturum açabilir.
- Kimlik bilgisi alma yanıtını işleme: Kullanıcının oturum açması için istemci uygulamasından uygulama sunucusuna geri yükleme anahtarını gönderin.
- Geri yükleme anahtarını silme.
Geri yükleme anahtarı oluşturma
Uygulamanız, etkin kullanıcılar için geri yükleme anahtarı oluşturulduğundan emin olmak amacıyla kullanıcının oturum açtığı tüm durumları kapsamalıdır. Aşağıdaki senaryolarda geri yükleme anahtarı oluşturun:
- Kullanıcı oturum açtıysa ve henüz bir geri yükleme anahtarı oluşturulmadıysa (ör. ana
ActivityiçinonCreateyönteminde olduğu gibi). - Kullanıcı oturum açarken veya yeni bir hesap kayıt akışını tamamlarken
Performansı optimize etmek ve her girişte geri yükleme kimlik bilgisi oluşturma veya kontrol etme yükünden kaçınmak için yerel depolama alanında bir boolean işareti veya kimlik bilgisi oluşturma zaman damgası (ör. has_synced_restore_credential) ayarlayarak anahtarın daha önce oluşturulup oluşturulmadığını takip edin.
Kimlik Bilgisi Yöneticisi'ni örneklendirme
Bir CredentialManager nesnesini örneklendirmek için uygulamanızın etkinlik bağlamını kullanın.
// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)
Uygulama sunucunuzdan kimlik bilgisi oluşturma seçeneklerini alma
Uygulama sunucunuzda FIDO uyumlu bir kitaplık kullanarak istemci uygulamanıza geri yükleme kimlik bilgisini oluşturmak için gereken bilgileri (ör. kullanıcı, uygulama ve ek yapılandırma özellikleri hakkında bilgiler) gönderin. Sunucu tarafı uygulama hakkında daha fazla bilgi için Sunucu tarafı kılavuzu'na bakın.
Geri yükleme anahtarını oluşturma
Sunucu tarafından gönderilen ortak anahtar oluşturma seçeneklerini ayrıştırdıktan sonra bu seçenekleri bir CreateRestoreCredentialRequest nesnesine sarmalayarak ve CredentialManager nesnesiyle createCredential() yöntemini çağırarak bir geri yükleme anahtarı oluşturun.
// createRestoreRequest contains the details sent by the server
val response = credentialManager.createCredential(context, createRestoreRequest)
Kodla ilgili önemli noktalar
CreateRestoreCredentialRequestnesnesi aşağıdaki alanları içerir:requestJson:PublicKeyCredentialCreationOptionsJSONiçin Web Authentication API biçiminde uygulama sunucusu tarafından gönderilen kimlik bilgisi oluşturma seçenekleri.Geri yükleme anahtarının buluta yedeklenip yedeklenmeyeceğini belirlemek için
isCloudBackupEnabled:Booleanalanı. Bu işaret varsayılan olaraktrueşeklindedir. Bu alan aşağıdaki değerleri içerir:true: (Önerilir) Bu değer, kullanıcının Google Yedekleme ve uçtan uca şifreleme (ör. ekran kilidi) özellikleri etkinse geri yükleme anahtarlarının buluta yedeklenmesini sağlar.false: Bu değer, anahtarı bulutta değil yerel olarak kaydeder. Kullanıcı buluttan geri yüklemeyi seçerse anahtar yeni cihazda kullanılamaz.
Kimlik bilgisi oluşturma yanıtını işleme
Credential Manager API, CreateRestoreCredentialResponse türünde bir yanıt döndürür. Bu yanıt, ortak anahtar kimlik bilgisi kayıt yanıtını JSON biçiminde içerir.
Uygulamanızdaki ortak anahtarı, bağlı taraf sunucusuna gönderin. Bu ortak anahtar, geçiş anahtarı oluşturduğunuzda oluşturulan ortak anahtara benzer. Sunucuda geçiş anahtarı oluşturma işlemini gerçekleştiren kod, geri yükleme anahtarı oluşturma işlemini de gerçekleştirebilir. Sunucu tarafı uygulama hakkında daha fazla bilgi için geçiş anahtarlarıyla ilgili kılavuza bakın.
Geri yükleme anahtarı oluşturma işlemi sırasında şu istisnaları ele alın:
CreateRestoreCredentialDomException:requestJsongeçersizse vePublicKeyCredentialCreationOptionsJSONiçin WebAuthn biçimine uymuyorsa bu istisna oluşur.E2eeUnavailableException: Bu istisna,isCloudBackupEnabledtrueolduğunda ancak kullanıcının cihazında veri yedekleme veya uçtan uca şifreleme (ör. ekran kilidi) olmadığında ortaya çıkar.
Kimlik Bilgilerini Geri Yükleme özelliğinin her durumda oluşturulmasını sağlamak içinE2eeUnavailableExceptiondeğerini açıkça işlemeniz gerekir. Bunun içincreateCredentialdeğeriniisCloudBackupEnableddeğeritrueolarak ayarlanmış şekilde çağırın.E2eeUnavailableExceptionhatası oluşursa hatayı yakalayın veisCloudBackupEnabledparametresinifalseolarak ayarlayarakcreateCredentialyöntemini tekrar çağırın.IllegalArgumentException: Bu istisna,createRestoreRequestboşsa veya geçerli bir JSON değilse ya da WebAuthn spesifikasyonlarına uygun geçerli biruser.idiçermiyorsa ortaya çıkar.
Geri yükleme anahtarıyla oturum açma
Cihaz kurulumu sırasında kullanıcının oturumunu arka planda açmak için Kimlik Bilgilerini Geri Yükleme özelliğini kullanın.
Uygulama sunucusundan kimlik bilgisi alma seçeneklerini alma
İstemci uygulamasına, sunucudan geri yükleme anahtarını almak için gereken seçenekleri gönderin. Bu adımla ilgili benzer geçiş anahtarı kılavuzu için Geçiş anahtarıyla oturum açma başlıklı makaleyi inceleyin. Sunucu tarafı uygulama hakkında daha fazla bilgi için sunucu tarafı kimlik doğrulama kılavuzuna bakın.
Geri yükleme anahtarını alma
Yeni cihazda geri yükleme anahtarını almak için CredentialManager nesnesinde getCredential() yöntemini çağırın.
Aşağıdaki senaryoların her ikisinde de geri yükleme anahtarını getirmeniz önerilir:
- Uygulamanın cihazda ilk kez başlatılması sırasında. Bu senaryoda kimlik bilgilerinin geri yüklenmesi, uygulama verilerinin geri yüklenmesinden bağımsızdır.
- Uygulama verilerini yedekleme ve geri yükleme özelliği etkinse uygulama verileri geri yüklendikten hemen sonra geri yükleme anahtarını alın. Uygulamanızın yedeklemesini yapılandırmak için
BackupAgentkullanın veonRestoreFinishedgeri çağırma işlevindegetCredentialişlevini tamamladığınızdan emin olun. Yalnızca anahtar/değer yedeklemeleri için çağrıldığındanonRestoreyöntemini kullanmayın.onRestoreFinishedise her türlü yedekleme geri yükleme işlemi için güvenilir bir şekilde çağrılır. Bu sayede, kullanıcılar yeni cihazlarını ilk kez açtığında olası gecikmeler önlenir ve kullanıcıların uygulamanızı açmasını beklemeden uygulamayla etkileşim kurması sağlanır. Örneğin, uygulamanız yeni cihazda ilk kez açılmadan önce kullanıcıya bildirim gönderebilir. Bu, özellikle mesajlaşma veya iletişim uygulamaları için önemlidir.
Yeni bir BackupAgent oluşturursanız ve daha önce allowBackup="true" ile yedeklemeyi etkinleştirdiyseniz uygulamanızın manifest dosyasında android:fullBackupOnly="true" boole değerini ayarlayın. Bu sayede uygulamanızın yedekleme ve geri yükleme davranışı korunur.
// Fetch the options required to get the restore key
val authenticationJson = fetchAuthenticationJson()
// Create the GetRestoreCredentialRequest object
val options = GetRestoreCredentialOption(authenticationJson)
val getRequest = GetCredentialRequest(listOf(options))
val response = credentialManager.getCredential(context, getRequest)
// Type-check and extract the restore credential
val credential = response.credential as RestoreCredential
Credential Manager API'leri, GetCredentialResponse türünde bir yanıt döndürür. Bu yanıtta yer alan kimlik bilgisi, ortak anahtarı barındıran RestoreCredential türündedir.
Oturum açma yanıtını işleme
Uygulamadaki ortak anahtarı, kullanıcının oturum açması için kullanılabilecek olan bağlı taraf sunucusuna gönderin. Sunucu tarafında bu işlem, geçiş anahtarı kullanarak oturum açmaya benzer. Sunucuda geçiş anahtarlarıyla oturum açma işlemini gerçekleştiren kod, geri yükleme anahtarlarıyla oturum açma işlemlerini de gerçekleştirebilir. Geçiş anahtarlarının sunucu tarafı uygulaması hakkında daha fazla bilgi için Geçiş anahtarıyla oturum açma başlıklı makaleyi inceleyin.
Geri yükleme anahtarını silme
Kimlik Bilgisi Yöneticisi durum bilgisi içermez ve kullanıcı etkinliğinden haberdar değildir. Bu nedenle, kullanım sonrasında geri yükleme anahtarlarını otomatik olarak silmez. Bir geri yükleme anahtarını silmek için clearCredentialState yöntemini çağırın. Güvenlik için, kullanıcı oturumu her kapattığında anahtarı silin. Bu sayede, kullanıcı uygulamayı aynı cihazda bir sonraki açışında oturumu kapatılır ve tekrar oturum açması istenir.
Bir uygulamanın kaldırılması, kullanıcının oturumu kapatırkenki niyetine benzer şekilde, ilgili geri yükleme anahtarını o cihazdan silme niyeti olarak yorumlanır.
Geri yükleme anahtarları yalnızca aşağıdaki durumlarda kaldırılır:
- Sistem düzeyindeki işlemler: Kullanıcılar uygulamayı kaldırır veya verilerini temizler.
- Uygulama düzeyinde çağrılar: Uygulamanızın kodunda kullanıcı oturumunu kapatma işlemini gerçekleştirirken
clearCredentialState()yöntemini çağırarak anahtarı programatik olarak silin.
Kullanıcı uygulamanızda oturumu kapattığında CredentialManager nesnesinde clearCredentialState() yöntemini çağırın.
// Create a ClearCredentialStateRequest object
val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
// When the user logs out, delete the restore key
val response = credentialManager.clearCredentialState(clearRequest)