Cordovaでの生体認証について
古い記事が多く、最新のものがないので作成することにしました。
セキュリティの観点から、今後生体認証の実装が増えると思います。
まずはプラグインを入れます。
色々プラグインはありますが、おすすめは以下です。
https://github.com/NiklasMerz/cordova-plugin-fingerprint-aio
このプラグインは優秀で、私が確認した限り各OSで以下の認証で動作確認が取れました。
iOS:FaceID、TouchID
Android:指紋認証、生体認証
入れたいフォルダで以下のコマンドを実行しプラグインをインストールします。
cordova plugin add cordova-plugin-fingerprint-aio --save
プロパティ紹介
主なプロパティは以下です。
ここでは各プロパティで実装時に私がぶつかった壁や落とし穴を紹介します。
生体認証が使用可能か返却
Fingerprint.isAvailable(isAvailableSuccess, isAvailableError, optionalParams);
①requirestrongbiometrics(Android)をtrueに設定すると、「クラス3 (BIOMETRIC_STRONG)」の生体認証が動作するかどうかを返却するので、Androidの顔認証は高確率で使用不可になります。
②機種によっては、正確な情報での返却がされないことがあります。
参考:https://github.com/NiklasMerz/cordova-plugin-fingerprint-aio/issues/451
生体認証ダイアログを表示
Fingerprint.show({
description: "Some biometric description"
},
successCallback, errorCallback);
①Androidの機種によっては顔認証そのものが使用できない場合があるようです。
②下二つのプロパティと違い、生体認証の追加登録や削除で生体認証のリセットをすることができません。
補足
秘密が登録できないので、生体認証に成功した際に cordova-plugin-fileなどのプラグインを使用しアプリ内部のストレージに必要な情報を保存する方法をおすすめします。
Crypto-jsを使用してAESなどで暗号化すると尚良いでしょう。
生体認証での失敗時のロックは自然にOS側で行われますが、アプリ側で失敗回数をカウントしておいてロックシステムなどをつくることもできると思います。
生体認証ダイアログを表示し、秘密を登録する
Fingerprint.registerBiometricSecret({
description: "Some biometric description",
secret: "my-super-secret",
invalidateOnEnrollment: true,
disableBackup: true, // always disabled on Android
}, successCallback, errorCallback);
①iOSは認証ダイアログが表示されません。
②Androidの生体認証は強度によって決まるので、機種によっては顔認証が動作しません。
生体認証ダイアログを表示し、秘密を取得する
Fingerprint.loadBiometricSecret({
description: "Some biometric description",
disableBackup: true, // always disabled on Android
}, successCallback, errorCallback);
①Androidの生体認証は強度によって決まるので、機種によっては顔認証が動作しません。
②Androidで生体認証に失敗した後に、PINでの認証に成功した場合、secretの取得内容が保存したものではない別のメッセージ「biometric_success」の取得になります。
参考:https://github.com/NiklasMerz/cordova-plugin-fingerprint-aio/issues/378
各プロパティのオプションや詳細などは、https://github.com/NiklasMerz/cordova-plugin-fingerprint-aio を参照してください。
参考URL