Android 向け FIDO2 API

FIDO2 API を使用すると、Android アプリは、ユーザーの認証を目的として、証明済みの強力な公開鍵ベースの認証情報を作成して使用できます。この API は、BLE、NFC、USB ローミング認証システム(セキュリティ キー)とプラットフォーム認証システムの使用をサポートする WebAuthn Client 実装を提供します。これにより、ユーザーは指紋または画面ロックを使用して認証できます。

統合

FIDO2 API のエントリ ポイントは Fido2ApiClient です。

API は、次の 2 つのオペレーションをサポートしています。

  • 登録は、ユーザーが認証システムをアカウントに関連付ける際に、各認証システムがアカウントごとに 1 回行われます。
  • 証明書利用者がユーザーの認証を必要とするたびに、署名が行われます。

登録と署名のどちらにも、ユーザーの操作が必要です。

API の使用方法を示すサンプル アプリケーションは、https://github.com/android/identity-samples/tree/main/Fido2 にあります。

ウェブサイトとの相互運用性

簡単に、ユーザーがウェブサイトと Android アプリ間で認証情報をシームレスに共有できるようにします。そのためには、デジタル アセット リンクを利用します。関連付けを宣言するには、ウェブサイトでデジタル アセット リンクの JSON ファイルをホストし、デジタル アセット リンク ファイルへのリンクをアプリのマニフェストに追加します。

たとえば、https://example.com を Android アプリ com.example.android に関連付ける場合は、次の 3 つの手順が必要です。

ステップ 1: ドメインで assetlinks.json をホストする

このような JSON ファイルを作成し、https://example.com/.well-known/assetlinks.json でホストします。

[
  {
    "relation" : [
      "delegate_permission/common.handle_all_urls",
      "delegate_permission/common.get_login_creds"
    ],
    "target" : {
      "namespace" : "web",
      "site" : "https://example.com"
    }
  },
  {
    "relation" : [
      "delegate_permission/common.handle_all_urls",
      "delegate_permission/common.get_login_creds"
    ],
    "target" : {
      "namespace" : "android_app",
      "package_name" : "com.example.android",
      "sha256_cert_fingerprints" : [
         "DE:AD:BE:EF"
      ]
    }
  }
]

Google からクロール可能で、HTTP ヘッダー Content-Type: application/json とともに提供されることを確認してください。

sha256_cert_fingerprints は、アプリの署名証明書の SHA256 フィンガープリントです。詳しくは、Android アプリリンクのドキュメントをご覧ください。

Android アプリで、マニフェスト ファイルの <application> に次の行を追加します。

<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />

ステップ 3: asset_statements 文字列リソースを strings.xml ファイルに追加する

asset_statements 文字列は、読み込む assetlinks.json ファイルを指定する JSON オブジェクトです。文字列で使用するアポストロフィや引用符はエスケープする必要があります。次に例を示します。

<string name="asset_statements" translatable="false">
[{
  \"include\": \"https://example.com/.well-known/assetlinks.json\"
}]
</string>

アプリとウェブサイトの関連付けについて詳しくは、Android での SmartLock for Passwords のドキュメントをご覧ください。