Online Authentication Kit(在线认证服务)- SOTER免密身份认证
本文介绍了DevEco Studio在Windows和macOS系统上的安装方式,并详细阐述了SOTER生物特征免密身份认证的功能与应用。SOTER通过生物特征(如指纹/3D人脸)替代传统密码,提供开通、认证和注销功能,适用于免密登录、支付等场景。文章还列出了相关权限、约束与限制,并提供了接口说明和开发步骤,帮助开发者实现生物特征认证功能。
·
DevEco Studio支持Windows和macOS系统,下面将针对两种操作系统的软件安装方式分别进行介绍。
文章目录


场景介绍
用户可以利用生物特征来代替传统的密码验证,实现免密身份认证。
- 开通:提供移动端开通SOTER生物特征(指纹/3D人脸)免密身份认证的能力。
- 认证:提供移动端采用生物特征(指纹/3D人脸)进行SOTER免密身份认证的能力。
- 注销:提供移动端注销SOTER生物特征(指纹/3D人脸)免密身份认证的能力。
基本概念
SOTER旨在提供一套生物认证平台和标准,使得业务可以采用设备上的传感器(如人脸传感器/指纹传感器)进行安全、高效的免密登录、免密支付等操作,当前已广泛应用于微信小程序/公众号、指纹支付等业务场景。
相关权限
- 获取网络权限:ohos.permission.INTERNET。
- 获取振动权限:ohos.permission.VIBRATE。
- 获取生物识别权限:ohos.permission.ACCESS_BIOMETRIC。
约束与限制
- 开发者应用需要部署SOTER服务器。
- 移动端设备需要支持生物特征(指纹/3D人脸),查询当前移动端设备是否支持可参见User Authentication Kit(需设备支持ATL4级别的认证可信等级)。
- 移动端设备使用此服务时需要处于联网状态。
业务流程
接口说明
表1 开通、认证、注销的所需要的接口
| 接口名 | 描述 |
|---|---|
| generateAppSecureKey(keyType: KeyType): Promise | 生成应用密钥 |
| generateAuthKey(keyAlias: string, keyType: KeyType): Promise | 生成认证密钥 |
| generateChallengeSync(keyAlias: string): Uint8Array | 生成Challenge |
| signWithAuthKeySync(keyAlias: string, authToken: Uint8Array, info: string): SignedResult | 使用认证密钥对业务数据签名 |
| deleteAuthKey(keyAlias: string): Promise | 删除认证密钥 |
开发步骤
- 导入SOTER模块。
import { soter } from '@kit.OnlineAuthenticationKit';
import { userAuth } from '@kit.UserAuthenticationKit';
- 生成应用密钥和认证密钥用于后续的开通、认证流程。
let keyType: soter.KeyType = soter.KeyType.ECC_P256; // 加密类型,只支持ECC_P256
let keyAlias: string = 'keyAlias'; // 开发者自定义密钥别名
// 生成应用密钥
let appSecureKey: Promise<Uint8Array> = soter.generateAppSecureKey(keyType);
// 生成AuthKey
let authKey: Promise<soter.SignedResult> = soter.generateAuthKey(keyAlias, keyType);
- 使用认证密钥签名,实现SOTER免密认证。
let keyType: soter.KeyType = soter.KeyType.ECC_P256; // 加密类型,只支持ECC_P256
let keyAlias: string = 'keyAlias'; // 开发者自定义密钥别名
let info: string = 'Message to be signed.'; //info需要服务端下发,服务端下发完成签名后需要重新上传到服务端
// 获取此次免密支付的challenge
let soterChallenge: Uint8Array = soter.generateChallengeSync(keyAlias);
let authParam: userAuth.AuthParam = {
challenge: soterChallenge,
authType: [userAuth.UserAuthType.FINGERPRINT],
authTrustLevel: userAuth.AuthTrustLevel.ATL4,
};
// 使用preAuthResult请求身份认证
let userAuthInstance = userAuth.getUserAuthInstance(authParam, {title: ' '});
// 未获取到authToken则会返回错误码1。
userAuthInstance.on('result', {
async onResult (result) {
let authToken = result.token;
try {
// 生物特征认证成功后,调用soter认证
console.info('soter auth start');
// 使用soter.signWithAuthKeySync接口为待认证数据签名。开发者根据业务需求选择同步/异步接口。
let authResult: soter.SignedResult = soter.signWithAuthKeySync(keyAlias, authToken, info);
console.info('Succeeded in doing authSyn authResult');
// 开发者处理authResult
} catch (err) {
console.error(`Failed to signWithAuthKeySync. Code: ${err.code}, message: ${err.message}`);
}
}
});
userAuthInstance.start();
- 关闭免密认证时,删除认证密钥。
// 删除AuthKey
soter.deleteAuthKey(keyAlias);

更多推荐

所有评论(0)