首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
HarmonyOS
发新帖
0
0
[原创]FIDO再升级!实现无密码秒级登录、支付
发表于: 2025-12-23 17:42
6619
[原创]FIDO再升级!实现无密码秒级登录、支付
HarmonyOS SDK
2025-12-23 17:42
6619
当前数字时代,人们日常频繁使用的密码,成了"记忆负担",密码太短不安全,密码太长又记不住,如果忘记密码,找回流程也较繁琐,严重影响了用户在应用登录或支付场景中的使用体验。 基于此,HarmonyOS SDK[在线认证服务](<mark class="encrypted">666K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2Z5N6h3q4%4k6h3W2Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8$3&6K6N6h3#2W2M7W2)9J5c8X3y4F1i4K6u0r3k6r3!0U0i4K6u0r3K9r3q4J5L8h3!0F1P5h3!0K6i4K6u0V1k6%4g2A6k6r3g2K6i4K6u0r3L8$3&6D9K9h3&6W2j5i4g2@1K9r3g2F1N6r3W2U0j5i4c8A6L8$3&6Q4x3X3c8A6L8Y4c8J5L8$3c8#2j5%4c8A6L8$3&6Q4x3@1k6Z5j5g2)9#2k6Y4y4G2N6i4u0U0k6g2)9K6c8r3S2E0M7K6p5`.</mark> "在线认证服务")(Online Authentication Kit)遵循FIDO(Fast Identity Online)、FIDO2、IIFAA(互联网可信认证联盟)和SOTER标准免密认证规范,提供了免密身份认证的移动端能力,并基于FIDO2标准协议构建了产品化的通行密钥能力,借用通行密钥,用户可使用指纹、人脸或手机解锁PIN码登录应用,实现一种简单又安全的登录方式。 ### 场景介绍 通行密钥服务主要提供了通行密钥注册、本地免密认证和跨设备扫码认证的能力,具体应用场景如下: ● 注册通行密钥 在需要给本地应用或网页提供一种方便、快速、安全的登录方式时,应用可以使用通行密钥服务的通行密钥注册能力为用户创建通行密钥。  ● 使用通行密钥登录本设备的应用或网页账号 用户在登录本设备的应用或者网页账号时,需要验证用户的身份,可以使用通行密钥服务的本地免密认证能力,实现快速登录。  ● 使用通行密钥跨设备扫码登录其他设备的应用或网页账号 用户在其他设备上登录应用或网页时,需要验证用户的身份,可以使用通行密钥服务的跨设备扫码认证能力。  ### 约束与限制 应用需满足以下条件,才能使用该功能。 * 开发者的业务需要接入符合FIDO2标准的协议,并部署符合FIDO2标准协议的FIDO服务端。 * 移动端设备需要支持生物特征(指纹或3D人脸),且当前移动端设备支持ATL4级别的认证可信等级。 * 通行密钥服务需要联网以及蓝牙能力,以便提供完整的在线身份校验服务。应用在调用本服务API前,需将通行密钥服务联网、使用蓝牙行为向用户明示,并且取得用户同意。 * 通行密钥服务需要将三方应用中的用户昵称及标识符信息上传至网络中继服务器,用于跨设备扫码认证场景,以便实现两台设备的认证数据通信。应用在调用本服务API前,需将收集的个人数据信息向用户明示,并且取得用户同意。 ### 开发步骤 通行密钥服务提供基于FIDO2标准协议的FIDO客户端实现,这里仅演示FIDO客户端相关API的使用,涉及应用服务器及FIDO服务器的相关处理由开发者自行实现,请参考FIDO2标准协议。 1. 需要业务方自行根据FIDO2标准协议部署FIDO服务器。 2. 导入相关模块。 import { BusinessError } from '@kit.BasicServicesKit'; import { UIContext } from '@kit.ArkUI' import { common } from '@kit.AbilityKit'; import { fido2 } from '@kit.OnlineAuthenticationKit'; 3. 注册通行密钥。 在注册通行密钥阶段,先要获取能力信息。调用getClientCapabilities接口获取认证能力列表,并且调用getPlatformAuthenticators接口获取平台认证器能力信息。 uiContext1: UIContext = this.getUIContext(); uiContext: common.UIAbilityContext = this.uiContext1.getHostContext() as common.UIAbilityContext; // 使用uiContext需要获取页面UIAbility的Context,一个页面获取一次即可 try { // 获取认证能力列表 let clientCapabilities: Map<fido2.ClientCapability, boolean> = await fido2.getClientCapabilities(this.uiContext); console.info("Succeeded in doing getClientCapabilities."); } catch (error) { let message = (error as BusinessError).message; let code = (error as BusinessError).code; console.error(`Failed to call getClientCapabilities error code is ${code}, message is ${message}`); // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考 } try { // 获取平台认证器能力 let platformAuthenticators: Array<fido2.AuthenticatorMetadata> = await fido2.getPlatformAuthenticators(this.uiContext); console.info("Succeeded in doing getPlatformAuthenticators."); } catch (error) { let message = (error as BusinessError).message; let code = (error as BusinessError).code; console.error(`Failed to call getPlatformAuthenticators error code is ${code}, message is ${message}`); // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考 } 接着,访问FIDO服务器,获取注册报文,就可以调用register接口进行通行密钥注册了。 // pkOptions为应用从FIDO服务端获取的注册报文, credentialCreationOp为应用组装注册信息 let credentialCreationOp: fido2.CredentialCreationOptions = { publicKey: pkOptions }; try { // 调用register进行通行密钥注册 let publicKeyAttestationCredential: fido2.PublicKeyAttestationCredential = await fido2.register(this.uiContext, credentialCreationOp); } catch (error) { let message = (error as BusinessError).message; let code = (error as BusinessError).code; console.error(`Failed to call register error code is ${code}, message is ${message}`); // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考 } 最后,应用使用注册结果(publicKeyAttestationCredential)组装注册响应报文,发送至FIDO服务端进行验证,获取注册结果报文。 4. 使用通行密钥进行身份认证。 在使用通行密钥进行身份认证阶段,先要获取能力信息,调用getClientCapabilities接口获取认证能力列表,并且调用getPlatformAuthenticators接口获取平台认证器能力信息。 // 使用uiContext需要获取页面UIAbility的Context,一个页面获取一次即可 let uiContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; try { // 获取认证能力列表 let clientCapabilities: Map<fido2.ClientCapability, boolean> = await fido2.getClientCapabilities(this.uiContext); console.info("Succeeded in doing getClientCapabilities."); } catch (error) { let message = (error as BusinessError).message; let code = (error as BusinessError).code; console.error(`Failed to call getClientCapabilities error code is ${code}, message is ${message}`); // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考 } try { // 获取平台认证器能力 let platformAuthenticators: Array<fido2.AuthenticatorMetadata> = await fido2.getPlatformAuthenticators(this.uiContext); console.info("Succeeded in doing getPlatformAuthenticators."); } catch (error) { let message = (error as BusinessError).message; let code = (error as BusinessError).code; console.error(`Failed to call getPlatformAuthenticators error code is ${code}, message is ${message}`); // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考 } 接着,通过访问FIDO服务器,获取认证报文,并调用authenticate接口进行认证。 // authPub为应用从FIDO服务端获取的认证报文,authCredentialRequestOptions为应用组装的认证信息 let authCredentialRequestOptions: fido2.CredentialRequestOptions = { publicKey: authPub, mediation: "optional" as fido2.CredentialMediationRequirement } try { // 调用authenticate接口进行认证 let pkAssertionCredential: fido2.PublicKeyAssertionCredential = await fido2.authenticate(this.uiContext, authCredentialRequestOptions); } catch (error) { let message = (error as BusinessError).message; let code = (error as BusinessError).code; console.error(`Failed to call authenticateerror code is ${code}, message is ${message}`); // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考 } 最后,应用使用认证结果(pkAssertionCredential)组装认证响应报文,发送至FIDO服务端进行验证,获取认证结果报文。 **了解更多详情\>\>** 访问[在线认证服务联盟官网](<mark class="encrypted">568K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2Z5N6h3q4%4k6h3W2Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8$3&6K6N6h3#2W2M7W2)9J5c8X3y4F1i4K6u0r3k6r3!0U0i4K6u0r3K9r3q4J5L8h3!0F1P5h3!0K6i4K6u0V1k6%4g2A6k6r3g2K6i4K6u0r3L8$3&6D9K9h3&6W2j5i4g2@1K9r3g2F1N6r3W2U0j5i4c8A6L8$3&6Q4x3X3c8A6L8Y4c8J5L8$3c8#2j5%4c8A6L8$3&6Q4x3@1k6Z5j5g2)9#2k6Y4y4G2N6i4u0U0k6g2)9K6c8r3S2E0M7K6p5`.</mark> "在线认证服务联盟官网") 获取[通行密钥服务开发指导文档](<mark class="encrypted">79fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2Z5N6h3q4%4k6h3W2Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8$3&6K6N6h3#2W2M7W2)9J5c8X3y4F1i4K6u0r3k6r3!0U0i4K6u0r3K9r3q4J5L8h3!0F1P5h3!0K6i4K6u0V1k6%4g2A6k6r3g2K6i4K6u0r3L8$3&6D9K9h3&6W2j5i4g2@1K9r3g2F1N6r3W2U0j5i4c8A6L8$3&6Q4x3X3c8H3j5i4y4K6K9$3g2&6i4K6u0V1K9h3&6@1M7X3!0Q4x3@1k6Z5j5g2)9#2k6Y4y4G2N6i4u0U0k6g2)9K6c8r3S2E0M7K6p5`.</mark> "通行密钥服务开发指导文档")
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
1
)
mb_eekvgidg
雪 币:
249
活跃值:
(175)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
28
粉丝
0
关注
私信
mb_eekvgidg
2
楼
很有内涵,能联系我吗137334010(企鹅
2026-4-7 18:55
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
HarmonyOS SDK
258
发帖
190
回帖
0
RANK
关注
私信
他的文章
[原创]HarmonyOS智慧多窗,让应用在任意窗口都“恰到好处”
270
[原创]AI 赋能 Push Kit 场景化消息开发,高效完成鸿蒙应用推送能力接入
472
[原创]HarmonyOS Push Kit 自分类权益 Skill,助力提升权益申请通过率
521
[原创]基于增强QUIC协议优化弱网下的直播观看体验
697
[原创]焕新鸿蒙应用权限管理方案,应用授权体验再升级
609
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部