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 删除认证密钥

开发步骤

  1. 导入SOTER模块。
import { soter } from '@kit.OnlineAuthenticationKit';
import { userAuth } from '@kit.UserAuthenticationKit';
  1. 生成应用密钥和认证密钥用于后续的开通、认证流程。
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);
  1. 使用认证密钥签名,实现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();
  1. 关闭免密认证时,删除认证密钥。
// 删除AuthKey
soter.deleteAuthKey(keyAlias);

在这里插入图片描述

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐