- 版本:1.3.1
- GitHub: https://github.com/NativeScript/plugins
- NPM: https://npmjs.net.cn/package/%40nativescript%2Fbiometrics
- 下载
- 昨天:29
- 上周:214
- 上个月:1018
@nativescript/biometrics
npm install @nativescript/biometrics
替代 @nativescript/fingerprint-auth
此插件替代 @nativescript/fingerprint-auth
API
Android 兼容性:API 23+
可用
JavaScript
var biometricAuthPlugin = require('@nativescript/biometrics');
var biometricAuth = new biometricAuthPlugin.BiometricAuth();
biometricAuth.available().then(function (avail) {
console.log('Available? ' + avail);
});
TypeScript
import { BiometricAuth, BiometricIDAvailableResult } from "@nativescript/biometrics";
class MyClass {
private biometricAuth: BiometricAuth;
constructor() {
this.biometricAuth = new BiometricAuth();
}
this.biometricAuth.available().then((result: BiometricIDAvailableResult) => {
console.log(`Biometric ID available? ${result.any}`);
console.log(`Touch? ${result.touch}`);
console.log(`Face? ${result.face}`);
console.log(`Biometrics? ${result.biometrics}`);
});
}
verifyBiometric
请注意,在 iOS 模拟器上,使用 Features->Face ID 菜单项注册面部,并指示成功/失败识别面部。如果使用 pinFallback,verifyBiometric 在 iOS 模拟器上会失败。
biometricAuth
.verifyBiometric({
title: 'Android title', // optional title (used only on Android)
message: 'Scan yer finger', // optional (used on both platforms) - for FaceID on iOS see the notes about NSFaceIDUsageDescription
fallbackMessage: 'Enter your PIN', // this will be the text to show for the "fallback" button on the biometric prompt
pinFallback: true, // allow fall back to pin/password
})
.then((result?: BiometricResult) => {
if (result.code === ERROR_CODES.SUCCESS) {
console.log('Biometric ID OK');
}
})
.catch((err) => console.log(`Biometric ID NOT OK: ${JSON.stringify(err)}`));
面部识别(iOS)
iOS 11 添加了对面部识别的支持,并由 iPhone X 首次支持。开发者需要为 NSFaceIDUsageDescription
提供一个值,否则您的应用程序可能会崩溃。
您可以通过将以下内容添加到 app/App_Resources/ios/Info.plist
来提供此值(使用面部识别的原因):
<key>NSFaceIDUsageDescription</key>
<string>For easy authentication with our app.</string>
Security++(iOS)
从 iOS 9 开始,可以检查注册的指纹列表是否自上次检查以来发生了变化。建议您添加此检查,以便您可以抵御对应用程序的黑客攻击。有关更多详细信息,请参阅这篇文章。
因此,在 available
之后检查指纹,您可以添加另一个检查。如果 didFingerprintDatabaseChange
返回 true
,则您可能希望在再次接受有效的指纹之前重新验证用户。
biometricAuth.available().then((avail) => {
if (!avail) {
return;
}
biometricAuth.didFingerprintDatabaseChange().then((changed) => {
if (changed) {
// re-auth the user by asking for his credentials before allowing a fingerprint scan again
} else {
// call the fingerprint scanner
}
});
});
生物识别和密码学
正常操作
如果您没有将任何选项(pinFallback / keyName)传递给 verify 方法,则插件将创建一个安全密钥,调用授权方法以触发面部/指纹,然后尝试使用该密钥加密一些文本。其想法是,除非用户已成功认证,否则密钥将不可访问。
然而,这并不是万无一失的,最安全的方法是将 secret
和 Keyname
选项传递给加密/解密文本。
具有身份验证的加密/解密
最佳实践是使用选项加密一些独立验证的机密,这更安全,因为用于解密的密钥无法在不进行适当认证的情况下访问,因此您的机密无法正确解密。
-
加密您的机密
使用相关属性调用
verifyBiometric
。biometricAuth
.verifyBiometric({
title: 'Enter your password',
message: 'Scan yer finger', // optional
pinFallback: false, // do not allow pinFallback to enable crypto operations
keyName: 'MySecretKeyName', // The name of the key that will be created/used
secret: 'The Secret I want encrypted',
})
.then((result) => {
const encryptedText = result.encrypted; // The text encrypted with a key named "MySecretKeyName" (Android Only)
const IV = result.iv; // the initialization vector used to encrypt (Android Only)
// For IOS the secret is stored in the keycain
})
.catch((err) => this.set('status', `Biometric ID NOT OK: " + ${JSON.stringify(err)}`));对于 Android,加密结果和向量将被存储在您的应用程序中,并在用户下次登录时调用
verifyBiometric
时使用。 -
解密您的机密
biometricAuth
.verifyBiometric({
title: 'Enter your password',
message: 'Scan yer finger', // optional
keyName: 'MySecretKeyName', // The name of the key that will be created/used
pinFallback: false, // do not allow pinFallback to enable crypto operations
android: {
decryptText: 'The encrypted text retrieved previously',
iv: 'The IV retrieved previously',
},
ios: { fetchSecret: true }, // Tell IOS to fetch the secret
})
.then((result) => {
const decryptedText = result.decrypted; // The unencrypted secret
verifyMySecret(decryptedText); // verify the secret by some means, e.g. a call to a back end server.
})
.catch((err) => this.set('status', `Biometric ID NOT OK: " + ${JSON.stringify(err)}`));
降级到 PIN
允许用户在锁屏凭据(PIN 等)上进行降级,将禁用密码学。
此外,对于运行 API < 30 的手机,由于调用旧指纹 API,只使用指纹。
例如:
biometricAuth
.verifyBiometric({
title: 'Enter your password',
message: 'Scan yer finger', // optional
fallbackMessage: 'Enter PIN', // optional
pinFallback: true, // do not allow pinFallback to enable crypto operations
ios: { customFallback: false }, // passing true here will show the fallback message and allow you to handle this in a custom manner.
})
.then((result) => {
console.log('Fingerprint/ PIN was OK');
})
.catch((err) => this.set('status', `Biometric ID NOT OK: " + ${JSON.stringify(err)}`));
许可
Apache 许可证版本 2.0