WebView でユーザーを認証する

このドキュメントでは、WebView を使用する Android アプリに Credential Manager API を統合する方法について説明します。Credential Manager は、バージョン 1.12.0 以降の android.webkit.WebView ライブラリでネイティブにサポートされています。

前提条件

WebView で Credential Manager を使用するには、アプリ モジュールのビルド スクリプトに次の依存関係を追加します。

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 アプリ、ウェブページ、バックエンドの間で適切な通信が行われることを確認します。

統合されたソリューションを本番環境にデプロイし、受け取った登録リクエストと認証リクエストをバックエンドで処理できることを確認します。バックエンド コードは、登録(create)プロセスと認証(get)プロセス用に初期の JSON を生成する必要があります。また、ウェブページから受け取ったレスポンスの妥当性確認と検証を処理する必要もあります。

実装が UX の推奨事項に対応していることを確認します。