はじめまして。LINEヤフー株式会社の石井です。
ヤフーのAndroidアプリにログイン機能を提供する社内向けのSDKの開発を担当しています。
近年、ログインの簡単さやセキュ リティなどの観点でパスキーが注目されています。
ヤフーのAndroidアプリでもパスキーを使ったログイン機能をご利用いただけますが、その実装を担っているのは、ログイン関連の機能全般を提供するID連携SDKです。
Androidアプリでパスキーに対応する方法はいくつかあります。
ID連携SDKでは、過去のバージョンとの互換性やユーザー体験を考慮し、現時点では WebView上のWebAuthn APIリクエストをフックし、パスキー周りをネイティブ実装する方法 を採用しています。
この記事では、その判断に至るまでの変遷を振り返りながら、Androidアプリでのパスキー対応における選択肢と採用判断のポイントをご紹介します。
※ここでのID連携SDKとは、Yahoo!デベロッパーネットワークで公開しているYahoo! ID連携 v2 Android SDKとは別のものです。
※FIDO認証には公開鍵を管理し認証を検証するFIDOサーバーが必要ですが、この記事ではそれらが用意されている前提のもと、Androidアプリ側での実装に焦点を当てています。
パスキーとは
2026年4月時点で、FIDO Alliance: Passkeys (Passkey Authentication)のQ&Aにある「WHAT IS PASSKEY?」では以下のように説明されています。
From a technical standpoint, passkeys are FIDO credentials for passwordless authentication.
FIDO Allianceの定義では、パスキーは技術的にはFIDOクレデンシャルであると位置づけられています。
FIDOクレデンシャルには、大きく Discoverable credential と Non-discoverable credential の2種類があります。
詳細な説明は省きますが、Discoverable credential はユーザー識別子を含むもの、Non-discoverable credentialはユーザー識別子を含まないものです。
また、Discoverable credentialのうち、デバイス間で同期できるものは 同期パスキー と呼ばれます。
本記事では、以降も必要に応じてこれらの用語を使います。
Androidでのパスキー対応の方法
2026年4月時点で、Androidアプリでパスキーによる認証を実現する方法は大きく4つあります。
| 方法 | 説明 | アプリ側の技術的難易度 |
|---|---|---|
| カスタムタブ | カスタムタブを使ったWebAuthnによる認証 | 低 |
| WebView + WebKitのWebAuthnサポート利用 | AndroidX WebKit 1.12.0で追加されたWebAuthnサポート機能を使ったWebAuthnによる認証 | 低 |
| WebView + パスキー周りをネイティブ実装 | WebAuthnリクエストをネイティブにブリッジし、パスキーの登録・認証をアプリ側独自のネイティブ実装で処理する方法 | 中〜高 |
| ネイティブ実装 | ログイン画面、パスキーの登録・認証をすべてネイティブで実装 | 中〜高 |
冒頭で言及したように、ヤフーのAndroidアプリ(ID連携SDK)では、現状 「WebView + パスキー周りをネイティブ実装」 を採用しています。
ここからは、その方法を選んだ背景を時系列で振り返ります。
ヤフーのAndroidアプリ(ID連携SDK)のパスキー対応
2020年10月:FIDO認証を使った再認証機能を追加
この時はまだ「パスキー」とい う用語は存在しておらず、Non-discoverable credentialによるFIDO認証機能が提供できるという状況でした。
ID連携SDKではログイン機能はOAuthベースで実現しているため、カスタムタブかWebViewを使い、WebAuthnによってFIDO認証を実現できることが理想でした。
しかし、それには以下のような課題がありました。
- カスタムタブの場合、アプリでログイン中のIDとカスタムタブ(ブラウザアプリ)でログイン中のIDが異なっていた場合に、再認証時にログイン中のIDが意図せず変わってしまう
- WebViewの場合、当時はWebKitなどによるWebAuthnサポートはなく、それ以外の対応方法の情報も少なく、実装難易度が高かった
そのため、FIDO2 APIを使いネイティブ実装でFIDOクレデンシャルの作成や認証機能を提供する形になりました。
ログイン機能をOAuthベースで実現しているという事情もあり、初回ログイン時のFIDO認証はセキュリティや工数の都合で断念し、再認証時のみFIDO認証を行う仕様としました。
この時点では、OAuthベースの構成とWebViewの制約を踏まえると、ネイティブ実装が現実的な選択肢でした。
2024年3月:同期パスキーに対応
この頃にはすでにパスキーが広がりはじめ、Android上でもCredential Manager APIにより、扱いやすくなっていました。
前述の通り、ID連携SDKではNon-discoverable credentialを作成し登録している状況でした。
つまり、機種変更をするとそのFIDOクレデンシャルは利用できなくなり、新しい端末で再度登録しなければなりません。
一方で、同期パスキーであれば、Googleパスワードマネージャーなどの認証情報プロバイダーを介して複数端末で同期されるため、機種変更したとしても登録済みのFIDOクレデンシャルを引き継ぐことができます。
そうしたユーザー体験の向上を目的に、Googleが推奨するCredential Manager APIを使って同期パスキーに対応することにしました。
ただ、対応に際しては以下の課題がありました。
- Credential Manager APIでパスキーが使えるのはAndroid 9(APIレベル28)以降
- Credential Manager APIではNon-discoverable credentialを使って認証ができない
2つ目の課題はつまり、認証処理をCredential Manager APIに完全に置き換えてしまうと、それまでFIDO認証を利用していたユーザーが、アップデート後にFIDO認証できなくなり、再度FIDOクレデンシャルの登録が必要になってしまうということです。
これらの課題に対してはFIDO2 APIとCredential Manager APIを使い分けることで対応しました。
後続の章では、この使い分けに関するポイントをご紹介します。
2025年3月:初回ログイン時のパスキー認証機能を追加
より安全性の高い認証の需要が高まるにつれ、Yahoo! JAPAN IDとしても初回ログイン時にパスキーを使った認証を使えるようにする必要性が出てきました。
この頃には、WebViewでWebAuthnを実現する場合、「WebView + パスキー周りをネイティブ実装」する方法が公式に案内されていました。
具体的なフローは後続の章で説明しますが、Webからのパスキー作成・認証のリクエストを受け取り、ネイティブ実装でFIDO2 APIとCredential Manager APIを使いFIDOクレデンシャルの作成や取得を行うことで実現しました。
2026年2月:WebKitのWebAuthnサポートに移行を試みるが…
現在では、WebViewでWebAuthn認証を実現する方法として、WebKitのWebAuthnサポートを利用する方法が公式に案内されています。
単純なパスキーの作成・認証であれば、アプリ側の実装はほとんど不要になっています。
ID連携SDKでもパスキー関連の煩雑なネイティブ実装を削除すべく、リファクタリングを試みました。
しかし、Android 14以上の端末での挙動にいくつか課題があり、現時点での対応は見送りました。
具体的にどのような課題があったかを後続の章でご紹介します。
パスキー対応 それぞれの方法のポイント
ここから、それぞれの方法の特徴と採用判断のポイントを見ていきます。
カスタムタブ
OAuthベースでログインを実装しており、ログイン画面をカスタムタブで表示している場合は、この方法が最もシンプルです。
Web側でWebAuthnに対応すればよく、他の方法で必要になるデジタルアセットリンクの設置や設定も不要です。
ただし、(パスキーでの認証に限った話ではないですが)アプリでログイン中のIDとカスタムタブ(ブラウザアプリ)でログイン中のIDが異なっていた場合に再認証時にIDが変わる可能性があるため、このリスクを許容できるか、あるいは何らかの方法で対策を行えることが、採用の条件になってくるかと思います。
ID連携SDKではこの部分がネックとなり採用には至りませんでした。
WebView + WebKitのWebAuthnサポート利用
OAuthベースでログインを実装しており、ログイン画面をWebViewで表示している場合は、この方法が有力です。
アプリ側の実装を大きく増やさずに対応できるのがメリットです。
やることは、
- デジタルアセットリンクを設置・設定する
- ライブラリの依存関係を追加する
- ログイン画面を表示するWebViewでWebAuthnサポートの設定を有効にする
これだけです。
具体的な実装方法はAndroid Developersの案内をご覧ください。
しかし、前述の通り、ID連携SDKではAndroid 14以上の端末での挙動に課題を感じ、この方法への移行は見送りました。
特に懸念を感じたのは以下の3点です。
Android 14以上では、パスキー未検出時のフィードバックがわかりづらい
パスキーが見つからなかった場合のユーザーフィードバックは、以下のような表示になります。
| 既存のID連携SDKやChrome | WebKitのWebAuthnサポート利用時 |
|---|---|
![]() | ![]() |

