Аутентификация пользователей с помощью WebView

В этом документе описывается, как интегрировать API Credential Manager с приложением Android, использующим WebView. Credential Manager изначально поддерживается библиотекой android.webkit.WebView версии 1.12.0 и более поздних.

Предпосылки

Чтобы использовать диспетчер учетных данных в WebView, добавьте следующие зависимости в скрипт сборки модуля вашего приложения:

dependencies {
  implementation("androidx.credentials:credentials:1.6.0-beta02")   
  implementation("androidx.credentials:credentials-play-services-auth:1.6.0-beta02")
  implementation("androidx.webkit:webkit:1.14.0")
}

Вам также потребуется связать свое приложение с веб-сайтом, владельцем которого оно является, с помощью привязки цифровых активов. Подробнее см. в статье о добавлении привязки цифровых активов .

Используйте библиотеку WebKit

Чтобы использовать библиотеку WebKit, проверьте наличие поддержки функций, а затем включите поддержку, вызвав setWebAuthenticationSupport() :

class WebViewActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val url = "https://passkeys-codelab.glitch.me/"
            AndroidView(
                factory = { context ->
                    WebView(context).apply {
                        settings.javaScriptEnabled = true

                        webViewClient = WebViewClientImpl()
                    }
                },
                update = { webView ->
                    run {
                        webView.loadUrl(url)
                        if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) {
                            WebSettingsCompat.setWebAuthenticationSupport(
                                webView.settings,
                                WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP,
                            )
                            // Check if getWebauthenticationSupport may have been disabled by the WebView.
                            Log.e(
                                "WebViewPasskeyDemo",
                                "getWebAuthenticationSupport result: " + WebSettingsCompat.getWebAuthenticationSupport(
                                    webView.settings
                                ),
                            )
                        } else {
                            Log.e("WebViewPasskeyDemo", "WebView does not support passkeys.")
                        }
                    }
                },
            )
        }
    }
}

Веб-интеграция

Чтобы узнать, как создать веб-интеграцию, см. статью Создание ключа доступа для входа без пароля . Вы также можете обратиться к исходному коду демонстрационного сайта .

Тестирование и развертывание

Тщательно протестируйте весь процесс в контролируемой среде, чтобы убедиться в правильности взаимодействия между приложением Android, веб-страницей и бэкэндом.

Разверните интегрированное решение в рабочей среде, убедившись, что бэкенд может обрабатывать входящие запросы на регистрацию и аутентификацию. Код бэкенда должен генерировать начальный JSON-код для процессов регистрации (create) и аутентификации (get). Он также должен выполнять валидацию и верификацию ответов, полученных от веб-страницы.

Убедитесь, что реализация соответствует рекомендациям UX .