Giyilebilir cihazlarda kimlik doğrulama: Kimlik Bilgisi Yöneticisi

Wear OS uygulamaları, tamamlayıcı uygulama olmadan bağımsız olarak çalışabilir. Bu, Wear OS uygulamasının internetteki verilere erişirken kimlik doğrulamayı kendi başına yönetmesi gerektiği anlamına gelir. Ancak kol saatinin küçük ekran boyutu ve sınırlı giriş özellikleri, Wear OS uygulamasının kullanabileceği kimlik doğrulama seçeneklerini sınırlandırır.

Bu kılavuzda, Wear OS uygulamaları için önerilen kimlik doğrulama yöntemi olan Kimlik Bilgisi Yöneticisi ile ilgili talimatlar verilmektedir.

İyi bir oturum açma deneyimi tasarlama hakkında daha fazla bilgi edinmek için Oturum açma kullanıcı deneyimi kılavuzunu inceleyin.

İlk değerlendirmeler

Uygulamaya başlamadan önce aşağıdaki noktaları göz önünde bulundurun.

Misafir modu

Tüm işlevler için kimlik doğrulama gerektirmez. Bunun yerine, kullanıcının oturum açmasını gerektirmeden olabildiğince fazla özellik sunun.

Kullanıcılar, mobil uygulamayı kullanmadan Wear uygulamanızı keşfedip yükleyebilir. Bu nedenle, hesapları olmayabilir ve uygulamanın sunduğu özellikleri bilmiyor olabilirler. Misafir modu işlevinin, uygulamanızın özelliklerini doğru bir şekilde gösterdiğinden emin olun.

Bazı cihazlar daha uzun süre kilidi açık kalabilir

Wear OS 5 veya sonraki bir sürümü çalıştıran desteklenen cihazlarda sistem, kullanıcının cihazı bileğinde takıp takmadığını algılar. Kullanıcı bilek algılamayı kapatıp cihazı bileğinden çıkarırsa sistem, cihazın kilidini normalden daha uzun süre açık tutar.

Uygulamanız daha yüksek düzeyde güvenlik gerektiriyorsa (ör. hassas veya özel olabilecek verileri gösterirken) önce bilek algılamanın etkin olup olmadığını kontrol edin:

val wristDetectionEnabled =
        isWristDetectionAutoLockingEnabled(applicationContext)

Bu yöntemin döndürdüğü değer false ise kullanıcıya, kullanıcıya özel içerik göstermeden önce uygulamanızda bir hesapta oturum açmasını isteyin.

Kimlik Bilgisi Yöneticisi

Wear OS'te kimlik doğrulama için önerilen API, Kimlik Bilgisi Yöneticisi'dir. Bu özellik, kullanıcıların bağlı bir eşlenmiş telefona ihtiyaç duymadan ve şifrelerini hatırlamadan Wear OS uygulamalarında bağımsız bir ortamda oturum açmaları için daha güvenli bir ortam sağlar.

Bu dokümanda, geliştiricilerin barındırdığı standart kimlik doğrulama mekanizmalarıyla bir Kimlik Bilgisi Yöneticisi çözümü uygulamak için ihtiyaç duydukları bilgiler özetlenmiştir. Bu bilgiler şunlardır:

  • Geçiş anahtarları
  • Şifreler
  • Birleştirilmiş kimlikler (ör. Google ile oturum açma)

Bu kılavuzda, kabul edilen diğer Wear OS kimlik doğrulama yöntemlerinin (Veri Katmanı Jetonu Paylaşımı ve OAuth) Kimlik Bilgisi Yöneticisi'ne yedek olarak nasıl taşınacağıyla ilgili talimatlar ve artık desteği sonlandırılmış bağımsız Google ile oturum açma düğmesinden yerleşik Kimlik Bilgisi Yöneticisi sürümüne geçişle ilgili özel talimatlar da sağlanmaktadır.

Wear OS'te geçiş anahtarları

Geliştiricilerin, Wear OS Kimlik Bilgisi Yöneticisi uygulamalarında geçiş anahtarları kullanmaları önemle tavsiye edilir. Geçiş anahtarları, son kullanıcı kimlik doğrulaması için yeni endüstri standardıdır ve kullanıcılar için önemli avantajlar sunar.

Geçiş anahtarları daha kolaydır

  • Kullanıcılar oturum açmak için bir hesap seçebilir. Kullanıcı adı yazmaları gerekmez.
  • Kullanıcılar, cihazın ekran kilidini kullanarak kimlik doğrulaması yapabilir.
  • Geçiş anahtarı oluşturulup kaydedildikten sonra kullanıcı, yeni bir cihaza sorunsuz bir şekilde geçiş yapabilir ve yeniden kaydolmak zorunda kalmadan hemen kullanabilir.

Geçiş anahtarları daha güvenlidir

  • Geliştiriciler, sunuculara şifre yerine yalnızca ortak anahtar kaydeder. Bu sayede, kötü niyetli bir kullanıcının sunucuları hacklemesi çok daha zor olur ve bir ihlal durumunda çok daha az temizlik yapılması gerekir.
  • Geçiş anahtarları, kimlik avına karşı koruma sağlar. Geçiş anahtarları yalnızca kayıtlı web sitelerinde ve uygulamalarında çalışır. Tarayıcı veya işletim sistemi doğrulamayı üstlendiği için kullanıcılar, aldatıcı bir sitede kimlik doğrulaması yapmaya kandırılmaz.
  • Geçiş anahtarları, SMS gönderme ihtiyacını azaltarak kimlik doğrulamayı daha uygun maliyetli hale getirir.

Geçiş anahtarlarını uygulama

Tüm uygulama türleri için kurulum ve rehberlik içerir.

Kurulum

  1. Uygulama modülünüzün build.gradle dosyasında hedef API düzeyini 35 olarak ayarlayın:

    android {
        defaultConfig {
            targetSdkVersion(35)
        }
    }
    
  2. androidx.credentials sürümler referansından en son kararlı sürümü kullanarak uygulamanızın veya modülünüzün build.gradle dosyasına aşağıdaki satırları ekleyin.

    androidx.credentials:credentials:1.5.0
    androidx.credentials:credentials-play-services-auth:1.5.0
    

Yerleşik kimlik doğrulama yöntemleri

Kimlik Bilgisi Yöneticisi birleşik bir API olduğundan Wear OS için uygulama adımları diğer cihaz türleriyle aynıdır.

Başlamak ve şifre anahtarları ile şifre desteğini uygulamak için mobil talimatları kullanın.

Kimlik Bilgisi Yöneticisi'ne Google ile oturum açma desteği ekleme adımlarının tümü mobil geliştirmeye yöneliktir ancak Wear OS'te de aynı adımlar uygulanır. Bu durumla ilgili özel hususlar için Eski Google ile oturum açma özelliğinden geçiş bölümüne bakın.

Wear OS'te kimlik bilgileri oluşturulamadığından mobil talimatlarda belirtilen kimlik bilgisi oluşturma yöntemlerini uygulamanız gerekmediğini unutmayın.

Yedek kimlik doğrulama yöntemleri

Wear OS uygulamaları için kabul edilen iki kimlik doğrulama yöntemi daha vardır: OAuth 2.0 (her iki varyant da) ve Mobil Kimlik Doğrulama Jetonu Veri Katmanı Paylaşımı. Bu yöntemlerin Kimlik Bilgisi Yöneticisi API'sinde entegrasyon noktaları olmasa da kullanıcıların Kimlik Bilgisi Yöneticisi ekranını kapatması durumunda yedek olarak Kimlik Bilgisi Yöneticisi kullanıcı deneyimi akışınıza dahil edilebilirler.

Kullanıcının Kimlik Bilgisi Yöneticisi ekranını kapatma işlemini işlemek için GetCredential mantığınızın bir parçası olarak NoCredentialException yakalayın ve kendi özel kimlik doğrulama kullanıcı arayüzünüze gidin.

yourCoroutineScope.launch {
    try {
      val response = credentialManager.getCredential(activity, request)
      signInWithCredential(response.credential)
    } catch (e: GetCredentialCancellationException) {
      navigateToFallbackAuthMethods()
    }
}

Özel kimlik doğrulama kullanıcı arayüzünüzde, oturum açma kullanıcı deneyimi kılavuzunda açıklanan diğer kabul edilebilir kimlik doğrulama yöntemlerinden herhangi birini sağlayabilirsiniz.

Veri katmanı jetonu paylaşımı

Telefon tamamlayıcı uygulaması, Wearable Data Layer API'yi kullanarak kimlik doğrulama verilerini Wear OS uygulamasına güvenli bir şekilde aktarabilir. Kimlik bilgilerini mesaj olarak veya veri öğesi olarak aktarın.

Bu tür kimlik doğrulama genellikle kullanıcının herhangi bir işlem yapmasına gerek bırakmaz. Ancak kullanıcıya oturum açtığını bildirmeden kimlik doğrulama yapmamaya çalışın. Hesabının mobil cihazdan aktarıldığını gösteren kapatılabilir bir ekran kullanarak kullanıcıyı bilgilendirebilirsiniz.

Önemli: Bu seçenek yalnızca ilgili mobil uygulama yüklendiğinde Android ile eşlenen kol saatlerinde çalıştığından Wear OS uygulamanız en az bir kimlik doğrulama yöntemi daha sunmalıdır. İlgili mobil uygulamaya sahip olmayan veya Wear OS cihazı iOS cihazla eşlenmiş olan kullanıcılar için alternatif bir kimlik doğrulama yöntemi sağlayın.

Aşağıdaki örnekte gösterildiği gibi, mobil uygulamadan veri katmanını kullanarak jetonları iletin:

val token = "..." // Auth token to transmit to the Wear OS device.
val dataClient: DataClient = Wearable.getDataClient(context)
val putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run {
    dataMap.putString("token", token)
    asPutDataRequest()
}
val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)

Aşağıdaki örnekte gösterildiği gibi Wear OS uygulamasında veri değişikliği etkinliklerini dinleyin:

val dataClient: DataClient = Wearable.getDataClient(context)
dataClient.addListener{ dataEvents ->
    dataEvents.forEach { event ->
        if (event.type == DataEvent.TYPE_CHANGED) {
            val dataItemPath = event.dataItem.uri.path ?: ""
            if (dataItemPath.startsWith("/auth")) {
                val token = DataMapItem.fromDataItem(event.dataItem).dataMap.getString("token")
                // Display an interstitial screen to notify the user that
                // they're being signed in.
                // Then, store the token and use it in network requests.
            }
        }
    }
}

Wearable Veri Katmanı'nı kullanma hakkında daha fazla bilgi için Wear OS'te veri gönderme ve senkronize etme başlıklı makaleyi inceleyin.

OAuth 2.0'ı kullanma

Wear OS, aşağıdaki bölümlerde açıklanan iki OAuth 2.0 tabanlı akışı destekler:

  • RFC 7636'da tanımlandığı şekilde Kod Değişimi için Kanıt Anahtarı (PKCE) ile Yetkilendirme Kodu Verme
  • RFC 8628'de tanımlandığı şekliyle Cihaz Yetkilendirmesi (DAG)
Kod Değişimi için Kanıt Anahtarı (PKCE)

PKCE'yi etkili bir şekilde kullanmak için RemoteAuthClient'i kullanın. Ardından, Wear OS uygulamanızdan bir OAuth sağlayıcısına kimlik doğrulama isteği göndermek için bir OAuthRequest nesnesi oluşturun. Bu nesne, jeton almak için OAuth uç noktanızın URL'sinden ve bir CodeChallenge nesnesinden oluşur.

Aşağıdaki kodda, kimlik doğrulama isteği oluşturma örneği gösterilmektedir:

val request = OAuthRequest.Builder(this.applicationContext)
    .setAuthProviderUrl(Uri.parse("https://...."))
    .setClientId(clientId)
    .setCodeChallenge(codeChallenge)
    .build()

Kimlik doğrulama isteğini oluşturduktan sonra sendAuthorizationRequest() yöntemini kullanarak tamamlayıcı uygulamaya gönderin:

val client = RemoteAuthClient.create(this)
client.sendAuthorizationRequest(request,
    { command -> command?.run() },
    object : RemoteAuthClient.Callback() {
        override fun onAuthorizationResponse(
            request: OAuthRequest,
            response: OAuthResponse
        ) {
            // Extract the token from the response, store it, and use it in
            // network requests.
        }

        override fun onAuthorizationError(errorCode: Int) {
            // Handle any errors.
        }
    }
)

Bu istek, tamamlayıcı uygulamaya bir çağrı tetikler. Tamamlayıcı uygulama da kullanıcının cep telefonundaki bir web tarayıcısında yetkilendirme kullanıcı arayüzünü gösterir. OAuth 2.0 sağlayıcısı, kullanıcının kimliğini doğrular ve istenen izinler için kullanıcının iznini alır. Yanıt, otomatik olarak oluşturulan yönlendirme URL'sine gönderilir.

Yetkilendirme başarılı veya başarısız olduktan sonra OAuth 2.0 sunucusu, istekte belirtilen URL'ye yönlendirir. Kullanıcı erişim isteğini onaylarsa yanıtta bir yetkilendirme kodu bulunur. Kullanıcı isteği onaylamıyorsa yanıtta bir hata mesajı yer alır.

Yanıt, sorgu dizesi biçimindedir ve aşağıdaki örneklerden birine benzer:

  https://wear.googleapis.com/3p_auth/com.your.package.name?code=xyz
  https://wear.googleapis-cn.com/3p_auth/com.your.package.name?code=xyz

Bu işlem, kullanıcıyı tamamlayıcı uygulamaya yönlendiren bir sayfa yükler. Tamamlayıcı uygulama, yanıt URL'sini doğrular ve onAuthorizationResponse API'yi kullanarak yanıtı Wear OS uygulamanıza iletir.

Kol saati uygulaması, yetkilendirme kodunu bir erişim jetonuyla değiştirebilir.

Cihaz Yetkilendirmesi

Cihaz Yetkilendirmesi Kullanımı sırasında kullanıcı, doğrulama URI'sini başka bir cihazda açar. Ardından yetkilendirme sunucusu, kullanıcıdan isteği onaylamasını veya reddetmesini ister.

Bu işlemi kolaylaştırmak için kullanıcının eşlenmiş mobil cihazında bir web sayfası açmak üzere RemoteActivityHelper simgesini kullanın. Aşağıdaki örnekte gösterildiği gibi:

// Request access from the authorization server and receive Device Authorization
// Response.
val verificationUri = "..." // Extracted from the Device Authorization Response.
RemoteActivityHelper.startRemoteActivity(
    this,
    Intent(Intent.ACTION_VIEW)
        .addCategory(Intent.CATEGORY_BROWSABLE)
        .setData(Uri.parse(verificationUri)),
    null
)
// Poll the authorization server to find out if the user completed the user
// authorization step on their mobile device.

iOS uygulamanız varsa jetonu yetkilendirmek için tarayıcıya güvenmek yerine uygulamanızda bu intent'i durdurmak üzere evrensel bağlantılar kullanın.

Eski Google ile oturum açma özelliğinden geçiş

Kimlik Bilgisi Yöneticisi'nde, Google ile oturum açma düğmesi için özel bir entegrasyon noktası vardır. Bu düğme daha önce bir uygulamanın kimlik doğrulama kullanıcı deneyiminin herhangi bir yerine eklenebilirdi. Ancak Kimlik Bilgisi Yöneticisi'ne dahil edilmesiyle birlikte eski seçeneğin desteği sonlandırıldı.

// Define a basic SDK check.
fun isCredentialManagerAvailable(): Boolean {
 return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM
}

// Elsewhere in the code, use it to selectively disable the legacy option.
Button(
  onClick = {
    if (isCredentialManagerAvailable()) {
      Log.w(TAG, "Devices on API level 35 or higher should use
                  Credential Manager for Sign in with Google")
    } else {
      navigateToSignInWithGoogle()
    }},
  enabled = !isCredentialManagerAvailable(),
  label = { Text(text = stringResource(R.string.sign_in_with_google)) },
  secondaryLabel = { Text(text = "Disabled on API level 35+")
  }
)