news 2026/6/22 1:49:12

# HarmonyOS SOTER 免密认证:让你的APP也可以跟微信指纹支付一样

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
# HarmonyOS SOTER 免密认证:让你的APP也可以跟微信指纹支付一样

什么是 SOTER 免密认证

前面两篇我们讲了 FIDO 和 IFAA,这篇来讲第三种方案——SOTER。如果你用微信指纹支付过,那你其实已经用过 SOTER 了。

SOTER 是一套生物认证平台和标准,主要用在微信小程序、公众号、指纹支付等场景。它的目标和 FIDO、IFAA 一样,都是让你用指纹或人脸来代替密码,但 SOTER 更侧重于微信生态。

简单说,SOTER 就是微信指纹支付背后的认证标准。如果你想让你的应用支持类似微信指纹支付的功能,SOTER 就是你需要的。

核心功能

HarmonyOS 的 SOTER 免密认证提供以下功能:

  1. 生成应用密钥(ASK):为你的应用生成一对密钥。ASK 是 Application Secure Key 的缩写,每个应用只需要生成一次。这个密钥用来标识你的应用,就像你的"身份证"一样。如果已经生成过了,就直接获取,不会重复生成
  2. 生成认证密钥(AK):为用户的生物特征生成认证密钥。AK 是 Auth Key 的缩写,每个用户的生物特征会对应一个认证密钥。你可以用keyAlias来区分不同的用户或场景,比如"支付"和"登录"可以用不同的 keyAlias
  3. 签名认证数据:用认证密钥对数据进行签名。这是 SOTER 的核心功能。用户完成指纹或人脸认证后,系统会返回一个 authToken,你把 authToken 和要签名的数据一起传给signWithAuthKeySync,就能得到一个数字签名。服务器用公钥验证这个签名,就能确认用户的身份
  4. 删除认证密钥:解除绑定。删除后,用户的生物特征就不再和应用关联了。如果想再次使用,需要重新生成认证密钥

环境搭建

硬件要求

  • 设备类型:华为手机、平板、PC/2in1
  • HarmonyOS 系统:HarmonyOS NEXT Beta1 及以上
  • 生物特征:设备需要支持指纹或 3D 人脸

软件要求

  • DevEco Studio 版本:DevEco Studio NEXT Beta1 及以上
  • HarmonyOS SDK 版本:HarmonyOS NEXT Beta1 SDK 及以上

搭建步骤

  1. 安装 DevEco Studio:去华为开发者官网下载安装
  2. 配置开发环境:确保网络环境正常
  3. 设备调试:使用真机进行调试

项目结构

├── entry/src/main/ets │ ├── entryability │ │ └── EntryAbility.ets // 程序入口类 │ ├── model │ │ └── SoterModel.ets // 生成密钥、签名、删除密钥功能 │ └── pages │ └── Index.ets // 主页面入口 └── entry/src/main/resources // 应用资源目录

核心逻辑放在SoterModel.ets里,包括密钥管理和签名认证。

SOTER 开通流程

下面是 SOTER 免密认证的开通流程:

检查 ASK 是否已生成

ASK 是否存在?

生成应用密钥 ASK

获取已有 ASK

检查 AK 是否已生成

AK 是否存在?

生成认证密钥 AK

获取已有 AK

开通完成

SOTER 认证流程

下面是 SOTER 免密认证的认证流程:

获取挑战值 challenge

配置认证参数

拉起生物特征认证

用户认证是否通过?

获取 authToken

认证失败

调用 signWithAuthKeySync

生成数字签名

发送签名给服务器

服务器用公钥验证签名

验证是否通过?

认证成功

验证失败

第一步:导入模块

import{soter}from'@kit.OnlineAuthenticationKit';import{userAuth}from'@kit.UserAuthenticationKit';

导入两个模块:

  • soter:SOTER 免密认证的核心接口
  • userAuth:用户认证接口,用来拉起指纹/人脸认证界面

第二步:生成应用密钥(ASK)

ASK 是 Application Secure Key 的缩写,就是应用密钥。每个应用需要先生成自己的密钥对。

publicgenerateAppSecureKey(keyType:soter.KeyType):Promise<Uint8Array>{// 检查ASK是否已生成if(soter.hasAppSecureKeySync(keyType)){returnsoter.getAppSecureKey(keyType);}else{returnsoter.generateAppSecureKey(keyType);}}

先用soter.hasAppSecureKeySync检查应用密钥是否已经生成。如果已经生成了,就直接获取;如果没有,就调用soter.generateAppSecureKey生成一个新的。

这个密钥是用来标识你的应用的,每个应用只需要生成一次。

第三步:生成认证密钥(AK)

AK 是 Auth Key 的缩写,就是认证密钥。每个用户的生物特征会对应一个认证密钥。

publicgenerateAuthKey(keyType:soter.KeyType,keyAlias:string):Promise<soter.SignedResult>{// 检查AK是否已生成if(soter.hasAuthKeySync(keyAlias,keyType)){returnsoter.getAuthKey(keyAlias,keyType);}else{returnsoter.generateAuthKey(keyAlias,keyType);}}

和 ASK 类似,先检查认证密钥是否已经生成。keyAlias是密钥的别名,可以用来区分不同的用户或场景。

第四步:获取认证挑战值

每次认证前,需要先获取一个挑战值(challenge),用来防止重放攻击。

publicgetChallenge(keyAlias:string):Uint8Array{returnsoter.generateChallengeSync(keyAlias);}

调用soter.generateChallengeSync获取挑战值。这个值是同步返回的,每次认证都会生成一个新的。

第五步:进行生物特征认证

有了挑战值,就可以拉起生物特征认证了。

letsoterChallenge:Uint8Array=SoterModel.getChallenge(keyAlias);// 拉起生物特征认证(此步骤为SOTER流程所需步骤,非SOTER能力)letauthParam:userAuth.AuthParam={challenge:soterChallenge,authType:[userAuth.UserAuthType.FINGERPRINT],authTrustLevel:userAuth.AuthTrustLevel.ATL4};letuserAuthInstance=userAuth.getUserAuthInstance(authParam,{title:'请认证'});

配置认证参数:

  • challenge:前面获取的挑战值
  • authType:认证类型,这里用的是指纹
  • authTrustLevel:认证信任等级,ATL4 是最高等级
  • title:认证界面显示的标题
userAuthInstance.on('result',{asynconResult(result:userAuth.UserAuthResult){letauthToken=result.token;if(result.result!=12500000){show("SOTER auth failed");}else{try{// 生物特征认证成功后,调用SOTER认证SoterModel.auth(keyAlias,authToken,info);show("SOTER auth success");}catch(err){show("SOTER auth failed");}}}});userAuthInstance.start();

监听认证结果。result.result等于12500000表示认证成功。认证成功后,获取authToken,然后调用 SOTER 的签名方法。

第六步:签名认证数据

SOTER 的核心是用认证密钥对数据进行签名。

publicauth(keyAlias:string,authToken:Uint8Array,info:string):soter.SignedResult{if(authToken===null){console.error("invalid parameters!");thrownewError("invalid parameters!");}returnsoter.signWithAuthKeySync(keyAlias,authToken,info);}

调用soter.signWithAuthKeySync对数据进行签名。这个方法接收三个参数:

  • keyAlias:认证密钥的别名
  • authToken:生物特征认证后返回的 token
  • info:要签名的数据

签名结果会返回给服务器,服务器用公钥验证签名,确认用户的身份。

第七步:删除认证密钥

如果不想用 SOTER 免密认证了,可以删除认证密钥。

publicdeleteAuthKey(keyAlias:string):Promise<void>{returnsoter.deleteAuthKey(keyAlias);}

调用soter.deleteAuthKey删除认证密钥。删除后,用户的生物特征和应用的绑定关系就解除了。

SOTER 认证流程

整个 SOTER 认证流程是这样的:

开通流程

  1. 生成应用密钥(ASK)
  2. 生成认证密钥(AK)
  3. 获取挑战值(challenge)
  4. 拉起生物特征认证
  5. 用认证密钥签名数据
  6. 把签名结果发送给服务器

认证流程

  1. 获取挑战值(challenge)
  2. 拉起生物特征认证
  3. 用认证密钥签名数据
  4. 把签名结果发送给服务器
  5. 服务器验证签名

关闭流程

  1. 删除认证密钥(AK)

SOTER、IFAA、FIDO 的区别

三种免密认证方案各有特点:

特性SOTERIFAAFIDO
发起方腾讯中国信通院FIDO Alliance
主要场景微信生态金融支付通用认证
密钥管理ASK + AK服务器下发UAF 协议
生态微信小程序/支付国内金融全球通用

简单说:

  • 如果你的应用在微信生态里,用 SOTER
  • 如果你的应用是金融类的,用 IFAA
  • 如果你的应用面向全球,用 FIDO

实际应用场景

SOTER 免密认证在实际开发中有很多用途:

微信小程序指纹支付

// 用户在小程序里用指纹支付asyncfunctionpayWithFingerprint(orderId:string){letchallenge=SoterModel.getChallenge('payment');letauthToken=awaitstartBiometricAuth(challenge);letsignature=SoterModel.auth('payment',authToken,orderId);// 把签名发送给服务器验证}

免密登录

// 用户用指纹登录asyncfunctionloginWithFingerprint(){letchallenge=SoterModel.getChallenge('login');letauthToken=awaitstartBiometricAuth(challenge);letsignature=SoterModel.auth('login',authToken,'login_data');// 把签名发送给服务器验证}

身份验证

// 敏感操作前验证身份asyncfunctionverifyIdentity(){letchallenge=SoterModel.getChallenge('verify');letauthToken=awaitstartBiometricAuth(challenge);letsignature=SoterModel.auth('verify',authToken,'verify_data');// 把签名发送给服务器验证}

适用场景

SOTER 免密认证适合以下场景:

  • 微信小程序:小程序内的指纹支付
  • 微信公众号:公众号内的身份验证
  • 支付应用:指纹支付、人脸支付
  • 金融应用:身份验证、交易确认

注意事项

  1. 网络要求:使用 SOTER 时需要处于联网状态
  2. 设备支持:设备需要支持指纹或 3D 人脸
  3. 生物特征录入:使用前需要先录入指纹或人脸
  4. 密钥安全:ASK 和 AK 要妥善保管
  5. 挑战值机制:每次认证都要生成新的挑战值,防止重放攻击

总结

SOTER 免密认证让你的应用支持类似微信指纹支付的功能,核心流程:

  1. 生成应用密钥(ASK)
  2. 生成认证密钥(AK)
  3. 获取挑战值
  4. 拉起生物特征认证
  5. 用认证密钥签名数据
  6. 把签名结果发送给服务器验证

掌握了这些,你就能让你的应用支持 SOTER 免密认证,提升用户体验和安全性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 11:00:59

软件工程师岗位全景、薪资待遇与发展前景深度解析(2026版)

前言&#xff1a;2026年软件工程师就业市场的新格局进入2026年&#xff0c;中国软件工程师就业市场已彻底告别"全员扩招、遍地高薪"的时代&#xff0c;呈现出明显的K型分化&#xff1a;AI工程化、云原生、基础架构、嵌入式&#xff08;汽车/工控&#xff09;方向人才…

作者头像 李华
网站建设 2026/6/14 1:50:50

3分钟搞定百度网盘限速:终极直链解析工具完整指南

3分钟搞定百度网盘限速&#xff1a;终极直链解析工具完整指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘几十KB的下载速度而烦恼吗&#xff1f;今天我要向…

作者头像 李华
网站建设 2026/6/14 6:25:41

Node-Influx 高级配置指南:连接池、集群管理和性能优化策略

Node-Influx 高级配置指南&#xff1a;连接池、集群管理和性能优化策略 【免费下载链接】node-influx &#x1f4c8; The InfluxDB Client for Node.js and Browsers 项目地址: https://gitcode.com/gh_mirrors/no/node-influx Node-Influx 是专为 Node.js 和浏览器设计…

作者头像 李华