Autentikasi di perangkat wearable: Pengelola Kredensial (original) (raw)

Aplikasi Wear OS dapat berjalan secara mandiri, tanpa aplikasi pendamping. Ini berarti aplikasi Wear OS perlu mengelola autentikasi sendiri saat mengakses data dari internet. Ukuran layar smartwatch yang kecil dan kemampuan input yang berkurang membatasi opsi autentikasi yang dapat digunakan aplikasi Wear OS.

Panduan ini memberikan petunjuk untuk metode autentikasi yang direkomendasikan untuk aplikasi Wear OS, yaitu Pengelola Kredensial.

Untuk mempelajari lebih lanjut cara mendesain pengalaman login yang baik, lihatPanduan UX login.

Pertimbangan awal

Sebelum memulai penerapan, pertimbangkan poin-poin berikut.

Mode tamu

Tidak mewajibkan autentikasi untuk semua fungsi. Sebagai gantinya, sediakan fitur sebanyak mungkin kepada pengguna tanpa mengharuskannya login.

Pengguna mungkin menemukan dan menginstal aplikasi Wear tanpa menggunakan aplikasi seluler, sehingga mereka mungkin tidak memiliki akun dan mungkin tidak mengetahui fitur yang ditawarkannya. Pastikan fungsi mode tamu menampilkan fitur aplikasi Anda secara akurat.

Beberapa perangkat mungkin tetap tidak terkunci lebih lama

Di perangkat yang didukung yang menjalankan Wear OS 5 atau yang lebih baru, sistem mendeteksi apakah pengguna memakai perangkat di pergelangan tangannya. Jika pengguna menonaktifkan deteksi pergelangan tangan, lalu melepaskan perangkat dari pergelangan tangannya, sistem akan membuat perangkat tetap tidak terkunci untuk jangka waktu yang lebih lama daripada biasanya.

Jika aplikasi Anda memerlukan tingkat keamanan yang lebih tinggi—seperti saat menampilkan data yang berpotensi sensitif atau pribadi—periksa terlebih dahulu apakah deteksi pergelangan tangan diaktifkan:

fun isWristDetectionAutoLockingEnabled(context: Context): Boolean { // Use the keyguard manager to check for the presence of a lock mechanism val keyguardManager = context.getSystemService() val isSecured = keyguardManager?.isDeviceSecure == true

// Use OEM-specific system settings to verify that on-body autolock is enabled.
val isWristDetectionOn = android.provider.Settings.Global.getInt(
    context.contentResolver, PIXEL_WRIST_AUTOLOCK_SETTING_STATE,
    0
) == 1

return isSecured && isWristDetectionOn

}

Jika nilai hasil dari metode ini adalah false, minta pengguna untuk login ke akun di aplikasi Anda sebelum menampilkan konten khusus pengguna.

Credential Manager

Credential Manager adalah API yang direkomendasikan untuk autentikasi di Wear OS. Fitur ini memberikan lingkungan yang lebih aman bagi pengguna untuk login ke aplikasi Wear OS dalam setelan mandiri, tanpa memerlukan ponsel yang terhubung dan dipasangkan, serta tanpa perlu mengingat sandi mereka.

Dokumen ini menguraikan informasi yang dibutuhkan developer untuk menerapkan solusi Pengelola Kredensial dengan mekanisme autentikasi standar yang dihostingnya, yaitu:

Panduan ini juga memberikan petunjuk tentang cara memigrasikan metode autentikasi Wear OS lain yang dapat diterima (Berbagi Token Lapisan Data dan OAuth) sebagai cadangan untuk Credential Manager, dan petunjuk khusus untuk menangani transisi dari Tombol Login dengan Google mandiri yang kini tidak digunakan lagi ke versi Credential Manager yang disematkan.

Batasan dan perbedaan Wear OS

Developer harus memperhatikan batasan dan perbedaan berikut di Wear OS:

Kunci sandi di Wear OS

Developer sangat dianjurkan untuk menerapkan kunci sandi di implementasi Credential Manager Wear OS mereka. Kunci sandi adalah standar industri baru untuk autentikasi pengguna akhir, dan kunci sandi memiliki beberapa manfaat signifikan bagi pengguna.

Kunci sandi lebih mudah

Kunci sandi lebih aman

Mengimplementasikan kunci sandi

Mencakup penyiapan dan panduan untuk semua jenis penerapan.

Penyiapan

  1. Tetapkan level API target ke 35 di file build.gradle modul aplikasi Anda:
android {  
    defaultConfig {  
        targetSdk(35)  
    }  
}  
  1. Tambahkan baris berikut ke file build.gradle untuk aplikasi atau modul Anda, menggunakan versi stabil terbaru dari referensi rilis androidx.credentials.
androidx.credentials🪪1.6.0  
androidx.credentials:credentials-play-services-auth:1.6.0  

Metode autentikasi bawaan

Karena Credential Manager adalah API terpadu, langkah-langkah implementasi untuk Wear OS sama dengan jenis perangkat lainnya.

Gunakan petunjuk arah seluleruntuk memulai dan menerapkan dukungan kunci sandi dan sandi.

Langkah-langkah untukmenambahkan dukungan Login dengan Google ke Credential Managerditujukan untuk pengembangan seluler, tetapi langkah-langkahnya sama di Wear OS.

Perhatikan bahwa karena kredensial tidak dapat dibuat di Wear OS, Anda tidak perlu menerapkan metode pembuatan kredensial yang disebutkan dalam petunjuk seluler.

Metode autentikasi cadangan

Ada dua metode autentikasi lain yang dapat diterima untuk aplikasi Wear OS: OAuth 2.0 (salah satu varian), dan Berbagi Lapisan Data Token Autentikasi Seluler. Meskipun metode ini tidak memiliki titik integrasi di Credential Manager API, metode ini dapat disertakan dalam alur UX Credential Manager sebagai penggantian jika pengguna menutup layar Credential Manager.

Untuk menangani tindakan pengguna yang menutup layar Pengelola Kredensial, tangkapNoCredentialException sebagai bagian dari logikaGetCredentialAnda, lalu buka UI autentikasi kustom Anda sendiri.

try { val getCredentialResponse: GetCredentialResponse = credentialManager.getCredential(activity, createGetCredentialRequest()) return authenticate(getCredentialResponse.credential) } catch (_: GetCredentialCancellationException) { navigateToSecondaryAuthentication() }

UI autentikasi kustom Anda kemudian dapat menyediakan metode autentikasi lain yang dapat diterima yang dijelaskan dalam panduan UX login.

Berbagi token lapisan data

Aplikasi pendamping ponsel dapat mentransfer data autentikasi ke aplikasi Wear OS dengan aman menggunakan Wearable Data Layer API. Transfer kredensial sebagai pesan atau sebagai item data.

Jenis autentikasi ini biasanya tidak meminta pengguna untuk melakukan tindakan apa pun. Namun, hindari melakukan autentikasi tanpa memberi tahu pengguna bahwa mereka sedang login. Anda dapat memberi tahu pengguna menggunakan layar yang dapat ditutup, yang menunjukkan bahwa akun mereka sedang ditransfer dari perangkat seluler.

**Penting:**Aplikasi Wear OS Anda harus menawarkan minimal satu metode autentikasi lain, karena opsi ini hanya berfungsi pada smartwatch yang tersambung ke Android saat aplikasi seluler yang terkait diinstal. Berikan metode autentikasi alternatif bagi pengguna yang tidak memiliki aplikasi seluler yang sesuai atau yang perangkat Wear OS-nya disambungkan dengan perangkat iOS.

Teruskan token menggunakan lapisan data dari aplikasi seluler, seperti yang ditunjukkan dalam contoh berikut:

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

Proses peristiwa perubahan data di aplikasi Wear OS, seperti yang ditunjukkan dalam contoh berikut:

class AuthDataListenerService : WearableListenerService() { override fun onDataChanged(dataEvents: DataEventBuffer) { 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.
                handleSignInSequence(token)
            }
        }
    }
}

/** placeholder sign in handler. */
fun handleSignInSequence(token: String?) {}

}

Untuk informasi lengkap tentang penggunaan Lapisan Data Wearable, lihatMengirim dan menyinkronkan data di Wear OS.

Menggunakan OAuth 2.0

Wear OS mendukung dua alur berbasis OAuth 2.0, yang dijelaskan di bagian berikut:

Kunci Bukti untuk Pertukaran Kode (PKCE)

Untuk menggunakan PKCE secara efektif, gunakan RemoteAuthClient. Kemudian, untuk membuat permintaan autentikasi dari aplikasi Wear OS ke penyedia OAuth, buat objek OAuthRequest. Objek ini terdiri dari URL ke endpoint OAuth Anda untuk mendapatkan token dan objekCodeChallenge.

Kode berikut menunjukkan contoh pembuatan permintaan autentikasi:

val oauthRequest = OAuthRequest.Builder(context) .setAuthProviderUrl(uri) .setCodeChallenge(codeChallenge) .setClientId(CLIENT_ID) .build()

Setelah Anda membuat permintaan autentikasi, kirimkan ke aplikasi pendamping menggunakan metodesendAuthorizationRequest():

RemoteAuthClient.create(context).sendAuthorizationRequest( request = oauthRequest, executor = { command -> command?.run() }, clientCallback = object : RemoteAuthClient.Callback() { override fun onAuthorizationResponse( request: OAuthRequest, response: OAuthResponse ) { // Extract the token from the response, store it, and use it in requests. continuation.resume(parseCodeFromResponse(response)) } override fun onAuthorizationError(request: OAuthRequest, errorCode: Int) { // Handle Errors continuation.resume(Result.failure(IOException("Authorization failed"))) } } )

Permintaan ini memicu panggilan ke aplikasi pendamping yang kemudian akan menampilkan UI otorisasi di browser web pada ponsel pengguna. Penyedia OAuth 2.0 mengautentikasi pengguna dan memperoleh izin pengguna untuk izin yang diminta. Respons akan dikirim ke URL pengalihan yang dibuat secara otomatis.

Setelah otorisasi berhasil atau gagal, server OAuth 2.0 akan mengalihkan ke URL yang ditentukan dalam permintaan. Jika pengguna menyetujui permintaan akses, respons akan berisi kode otorisasi. Jika pengguna tidak menyetujui permintaan, respons akan berisi pesan error.

Respons berupa string kueri, dan akan terlihat seperti salah satu contoh berikut:

  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

Tindakan ini akan memuat halaman yang mengarahkan pengguna ke aplikasi pendamping. Aplikasi pendamping memverifikasi URL respons dan meneruskan respons ke aplikasi Wear OS Anda menggunakan onAuthorizationResponse API.

Kemudian aplikasi smartwatch dapat menukar kode otorisasi dengan token akses.

Pemberian Otorisasi Perangkat

Saat menggunakan Pemberian Otorisasi Perangkat, pengguna akan membuka URI verifikasi di perangkat lain. Kemudian, server otorisasi akan meminta mereka untuk menyetujui atau menolak permintaan tersebut.

Untuk mempermudah proses ini, gunakanRemoteActivityHelper untuk membuka halaman web di perangkat seluler pengguna yang disambungkan, seperti yang ditunjukkan dalam contoh berikut:

// Request access from the authorization server and receive Device Authorization Response. private fun verifyDeviceAuthGrant(verificationUri: String) { RemoteActivityHelper(context).startRemoteActivity( Intent(Intent.ACTION_VIEW).apply { addCategory(Intent.CATEGORY_BROWSABLE) data = Uri.parse(verificationUri) }, null ) }

Jika Anda memiliki aplikasi iOS, gunakan link universal untuk menangkap intent ini di aplikasi Anda, bukan mengandalkan browser untuk melakukan otorisasi token.