华为HarmonyOS帮助应用实现在线认证服务 -- 3 IFAA免密身份认证

ops/2024/12/16 14:09:24/

场景介绍

开通:提供移动端开通生物特征(指纹/3D人脸)IFAA免密身份认证的能力。使用用户已有的生物特征类型进行开通,会开通移动端对应生物特征类型的IFAA免密身份认证能力。

认证:提供移动端认证生物特征(指纹/3D人脸)IFAA免密身份认证的能力。使用用户已开通的生物特征进行认证,认证成功;使用未开通的生物特征进行认证,认证失败。

注销:提供移动端注销生物特征(指纹/3D人脸)IFAA免密身份认证的能力。使用用户已开通的生物特征类型进行注销,会注销移动端对应生物特征类型的IFAA免密身份认证能力。

基本概念

互联网金融身份认证联盟IIFAA(IIFAA),全称为International Internet Finance Authentication Alliance,是一个生物识别框架,它由IIFAA联盟推出并持续维护。

约束与限制

开发者应用已接入IIFAA联盟,可以从IIFAA中心服务器获取签名数据。

移动端设备需要支持生物特征(指纹/3D人脸)能力。

移动端设备使用此服务时需要处于联网状态。

接口说明

表1 开通、认证、注销的所需要的接口

接口名

描述

register(registerData: Uint8Array): Promise<Uint8Array>

开通指定用户的指定生物信息类型(指纹/3D人脸)的IFAA免密身份认证能力。

auth(authToken: Uint8Array, authData: Uint8Array): Promise<Uint8Array>

使用指定用户的生物信息类型进行IFAA免密身份认证。

deregisterSync(deregisterData: Uint8Array): void

注销指定用户指定生物信息类型(指纹/3D人脸)的IFAA免密身份认证能力。

getAnonymousIdSync(userToken: Uint8Array): Uint8Array

获取移动端设备标识ID。

开发步骤

  1. 注册IFAA免密身份认证

     
    1. import { ifaa } from '@kit.OnlineAuthenticationKit';
    2. import { BusinessError } from '@kit.BasicServicesKit';
    3. // 开发者根据IIFAA协议构造TLV入参,转换为Uint8Array, 再使用ifaa.getAnonymousIdSync接口。此处new Uint8Array([0])需要替换为开发者定义的用户标识。
    4. let arg = new Uint8Array([0]);
    5. let getAnonIdResult: Uint8Array = ifaa.getAnonymousIdSync(arg);
    6. // 开发者需要使用getAnonIdResult服务端获取签名后的开通数据
    7. // 开发者将开通数据(IIFAA协议的TLV格式)转换为Uint8Array, 再使用ifaa.register接口。此处new Uint8Array([0])需要替换为有效数据。
    8. let TLV_Register_fp = new Uint8Array([0]);
    9. let registerPromise: Promise<Uint8Array> = ifaa.register(TLV_Register_fp);
    10. registerPromise.then(registerResult => {
    11. console.info("Succeeded in doing register.");
    12. // 开通成功,开发者获取ifaa.register结果并处理。
    13. }).catch((err: BusinessError) =>{
    14. console.error(`Failed to call register. Code: ${err.code}, message: ${err.message}`);
    15. // 开通失败,开发者获取ifaa.register错误并处理。
    16. });

  2. 使用IFAA免密身份认证进行认证

     
    1. import { ifaa } from '@kit.OnlineAuthenticationKit';
    2. import { userAuth } from '@kit.UserAuthenticationKit';
    3. import { BusinessError } from '@kit.BasicServicesKit';
    4. // 开发者根据IIFAA协议构造TLV入参,转换为Uint8Array, 再使用ifaa.getAnonymousIdSync接口。arg需要替换开发者自定义数据。
    5. let arg = new Uint8Array([0]);
    6. let getAnonIdResult: Uint8Array = ifaa.getAnonymousIdSync(arg);
    7. // 开发者需要使用getAnonIdResult在服务端获取签名后的认证数据
    8. // 获取此次免密支付的challenge
    9. let ifaaChallenge: Uint8Array = ifaa.preAuthSync();
    10. let authParam: userAuth.AuthParam = {
    11. challenge: ifaaChallenge,
    12. authType: [userAuth.UserAuthType.FINGERPRINT],
    13. authTrustLevel: userAuth.AuthTrustLevel.ATL4,
    14. };
    15. // 使用preAuthResult请求身份认证
    16. let userAuthInstance = userAuth.getUserAuthInstance(authParam, {title: ' '});
    17. userAuthInstance.on('result', {
    18. async onResult (result) {
    19. let authToken = result.token;
    20. try {
    21. // 生物特征认证成功后,调用IFAA认证
    22. console.info("IFAA auth start");
    23. // 开发者将认证数据(IIFAA协议的TLV格式)转换为Uint8Array, 再使用ifaa.authSync接口。此处new Uint8Array([0])需要替换为有效数据。
    24. let TLV_Auth_fp = new Uint8Array([0]);
    25. // 开发者根据业务需求选择同步/异步接口
    26. let authResult: Uint8Array = ifaa.authSync(authToken, TLV_Auth_fp);
    27. console.info("authSyn authResult" + authResult);
    28. // 开发者处理authResult
    29. } catch (error) {
    30. const err: BusinessError = error as BusinessError;
    31. console.error(`Failed to call auth. Code is ${err.code}, message is ${err.message}`);
    32. }
    33. }
    34. });
    35. userAuthInstance.start();

  3. 注销IFAA免密身份认证

     
    1. import { ifaa } from '@kit.OnlineAuthenticationKit'
    2. // 开发者根据IIFAA协议构造TLV入参,转换为Uint8Array, 再使用ifaa.getAnonymousIdSync接口。此处new Uint8Array([0])需要替换为开发者定义的用户标识。
    3. let arg = new Uint8Array([0]);
    4. let getAnonIdResult: Uint8Array = ifaa.getAnonymousIdSync(arg);
    5. // 开发者需要使用getAnonymousId的结果在服务端获取签名后的注销数据
    6. // 开发者将注销数据(IIFAA协议的TLV格式)转换为Uint8Array, 再使用ifaa.deregisterSync接口。此处new Uint8Array([0])需要替换为有效数据。
    7. let TLV_deregister_fp = new Uint8Array([0]);
    8. ifaa.deregisterSync(TLV_deregister_fp);

常见问题

现象描述:开通IFAA免密身份认证失败。

可能原因:移动端设备没有联网。

处理步骤:移动端设备连接WIFI或热点,再次尝试。


http://www.ppmy.cn/ops/142385.html

相关文章

苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?

苹果电脑可以安装windows操作系统吗? 先抛开虚拟机安装&#xff0c;苹果电脑可以安装Windows操作系统。苹果公司提供了一个名为Boot Camp的软件&#xff0c;它允许用户在Mac电脑上安装Windows操作系统。通过Boot Camp&#xff0c;用户可以在启动电脑时选择是要进入macOS还是Wi…

知乎日报——第四周

「OC」知乎日报——第四周&#xff08;完&#xff09; 文章目录 「OC」知乎日报——第四周&#xff08;完&#xff09;本周总结收藏界面使用高度数组优化设置缓存总结 本周总结 本周使用FMDB完成了本地数据的创建&#xff0c;管理相关的点赞收藏信息&#xff0c;优化了tableVi…

Vue3+Element-Plus使用el-form和el-table嵌套实现表格编辑并提交表单校验

el-form和el-table嵌套说明 ① :model"formData" 给表单绑定数据&#xff0c;formData是表单的数据对象 ② 表单数据对象formData中定义的tableData是表单内嵌套的表格显示数据 ③ rules为表单绑定的校验规则 ④ :prop"tableData.${$index}.name" 绑定传入…

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中&#xff0c;我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来&#xff0c;让我们开始新建一个项目吧&#xff01; 新建项目 首先进入unityHub的项目页面&#xff0c;点击“新项目”&#xff1a; 我们这个系列将会以2D平台…

The Annotated Transformer

The Annotated Transformer 外网链接&#xff1a;源码解析Transformer The Annotated Transformer

【roadMap】我转行软件测试的经历

软件测试这行咋样&#xff1f; 如果你简单了解过「软件测试工程师」这个岗位&#xff0c;就会知道它的基本特点&#xff1a; 待遇比开发低&#xff0c;比其他行业高入门丝滑&#xff0c;算是技术岗最简单的一类测试行业有细分领域&#xff1a;功能、性能、自动化… 每个行业…

第一章 计算机网络概论

1.1小节&#xff1a;计算机网络的形成和发展&#xff08;重要知识点&#xff09; 早期计算机网络&#xff1a; 计算机技术与通信技术结合&#xff1a; 起步于1951年麻省理工学院林肯实验室开发的SAGE系统&#xff0c;被视为计算机与通信技术整合的先驱。民用首次应用&#xf…

100个python经典面试题详解(新版)

应老粉要求,每晚加餐一个最新面试题 包括Python面试中常见的问题,涵盖列表、元组、字符串插值、比较操作符、装饰器、类与对象、函数调用方式、数据结构操作、序列化、数据处理函数等多个方面。 旨在帮助数据科学家和软件工程师准备面试或提升Python技能。 19、字符串乘法是…